你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

《低功耗MCU运行FreeRTOS》培训课程(三) Atollic环境实验

[复制链接]
wolfgang 发布时间:2018-4-27 23:06
本帖最后由 wolfgang2015 于 2018-5-17 22:51 编辑
' Q0 o- K% x1 H) k
4 q! }3 [2 N- B0 t在线培训上用的是 IAR 环境搭建的FreeRTOS环境,我看论坛里对STM32新出的Atollic TrueStudio For STM32的工具使用者不是很多,借此机会把TrueStudio工具搭建STM32的方法介绍一下:; R- a4 a9 t7 h. W( J
安装过程略,Atollic官网下载安装程序,下一步下一步就能安装成功。/ e9 L/ B! [, G0 G
1、安装好 TrueStudio 后,运行 TrueStudio , 在菜单栏中选择"New--->C Project"新建项目) p9 R! v5 F1 ]$ C# G* {4 W- Y5 Q
08.jpg 9 v; e; P" [& E( L8 u# M1 A. Q
" @3 E8 n: k( M1 h
! Y7 g# A# D2 j
2、选择一个嵌入式C项目,并配置为Atollic ARM Tools
' H4 w5 B  U! Q- j% O2 n. s" j% g 09.jpg
/ C2 m7 R$ X, F% S) {/ t+ y5 ?1 y2 C- U8 A& n; n
3、选择一个MCU 型号,并选择浮点、浮点单元、代码为之、指令集等参数。
  P. v' R  a# H6 P' {$ n- d手边的开发板是这次在线活培训活动提供的 Nucleo-L496ZG," @5 E2 v& W  p$ s% C
在硬件配置窗口的L4系列MCU下选择STM32L496ZG,(这里工具中没有提供Nucleo-L496ZG的板卡选择,但选择MCU一样能实现本实验3 Q; O* F0 M( _2 X: u
10.jpg
. Y0 F$ ~0 e' c3 E/ \' m# j3 Q  F7 o$ `/ c' l

: y2 d1 k' b+ Y7 j# V% e4、接下来选择项目编译和链接时所用的环境参数。
2 y' H0 L1 P; ~# d( ]. P这里要修改默认值,按下图选择“新库”,勾选“生成系统调用文件”的选项,并选择“动态堆大小(缺省)”。其他的默认
: w: c) [& q0 K. K! F7 T1 w 11_1.jpg
6 K/ ]* i. y- _/ q, H. {. X& P7 D, W. w- B% w
' y& D3 M' _* f% C& G& y
5、选择一个合适的下载调试工具,这里Nucleo-L496ZG开发板上具备ST-LINK,所以选择“ST-LINK”
: o+ r7 k7 W1 [2 n' g 12.jpg , ~$ }' x# V- @0 o) o# t

" D% x# h$ o2 g$ M' P0 i: b2 z9 b0 h# _/ ~& T% h8 s
6、最后Finish后,工程项目就生成了。; T8 J8 m" L* s
13.jpg " N% N2 O9 P, b% [
- U& ]* S% |( R

1 V- Q. g" ?& k. v: K
7、观察生成的工程项目,这里只有基本的框架,MCU的底层驱动、第三方工具以及包括驱动的芯片初始化代码等都未加入。
需要人工进行填补。
14.jpg
1)MCU的底层驱动 可以从CubeMX的驱动库中获取,我这里选用L4 V1.11.0的最新库,拷贝HAL_Driver目录下的inc和src文件夹即可,驱动文件中的样例文件 *_template.h 以及 *_template.c文件直接修改后缀名 *.h_back、*.c_back即可,否则会干扰正常的程序编译。
BSP可根据需要选择要或不要,CMSIS在建立项目时已配置好,不用再添加
15.jpg
5 n) R- X2 I1 A. @- o- I( x
2) FreeROTS 从官网下载或从官网的SVN下载:http://svn.code.sf.net/p/freertos/code/
下载tags目录的9.0源码或者 10.0.1的源码均可
cmsis_os.c/cmsis_os.h 的文件,从CubeMX的驱动库中获取(STM32Cube_FW_L4_V1.11.0\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS
在项目中新建一个目录FreeRTOS,将下列文件按此目录结构加到新建的FreeRTOS目录下:
16.jpg

9 D# z& p4 ^) a
/ t8 Z# q3 w5 y
8、最后在项目右键--〉Properties 中,  C/C++ Gennerl ---->Paths ans symbols 中,重新定义Includes文件以及 Source Location即可
5 x: E0 Q9 l  _! S

7 n6 \3 o, J9 _2 @6 q' m; j
9、项目生成后main.c中 的相关配置可自行添加,不熟悉的参考CubeMX 的生成代码,将以下代码代入到项目中
inc\stm32L4xx_it.h
inc\stm32L4xx_hal_conf.h
inc\FreeRtosConfig.h
inc\main.h

) `8 {* f( g& N) I) t" s
src\freertos.c
src\stm32l4xx_hal_msp.c
src\stm32L4xx_hal_timebase_TIM.c
src\stm32L4xx_it.c

8 P5 }  s7 r5 V  O
引入到系统中,main.c可以靠插入相关函数
这里要说的是,培训建议我们使用原生态的FreeRTOS,在理解 cmsis_os.c/cmsis_os.h 的文件基础上,尽可能的江os_xxxxx函数,替换为x_XXXX的函数或vxxxxx的函数

$ t& B4 s8 u( T6 r
将Main.c文件中的代码
  1. osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);: V" ?5 `8 X: |. D1 G, h
  2.         defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
    + Q5 {/ k! p% v
  3.         osKernelStart();
复制代码
替换为
  1. xTaskCreate((TaskFunction_t)vStartLedTask, //任务函数/ V' D% }9 z& u2 ?8 S
  2.                             "LED",                              //任务名称- M  D$ |; s3 C6 P- R: b$ c
  3.                                 configMINIMAL_STACK_SIZE,           //任务栈大小1 Q" D5 n4 V6 ?& e5 M
  4.                                 NULL,                               //任务函数参数6 P# Q! q' M; r2 P& r
  5.                                 tskIDLE_PRIORITY,                   //任务执行等级( w2 q  T4 S$ X. D& s# T. Q+ b& [7 Q
  6.                                 NULL);                              //任务句柄
    & T6 b8 o* a* z# A
  7.         vTaskStartScheduler();
复制代码
4 h2 G" Y$ X6 H, k( a# Y4 A$ n

& X0 z, d% e- T9 e$ m; a
在vStartLedTask 任务中添加相应的操作函数
  1. void vStartLedTask(void const * argument)
    , W* ~* C% Y; |3 S& T
  2. {
    . m6 G8 Q# H5 I' ~" I1 X) [
  3.         uint8_t sta = ON;
    1 |. c+ J2 g% M8 F" y
  4.         uint16_t delay = 500;
      |8 ]: R4 O9 K" w: ^9 r
  5.   /* USER CODE BEGIN 5 */2 j5 K) {9 h& r, ^8 {( q2 c
  6.   /* Infinite loop */
    / F8 z( M. z/ Z: _, }8 q
  7.   for(;;)
    4 F8 k+ X0 a6 J! @% M# s1 J- g% ?. V
  8.   {0 k4 H. H% b5 ?$ f6 i6 N) r
  9.           LED(sta);" x" w) s' y, h5 ~
  10.           sta =!sta;5 E6 f5 |9 s* Z; N' u
  11.           vTaskDelay(delay / portTICK_PERIOD_MS);' S; N6 _& ]1 d& d$ m' D
  12.   }9 s- T' T8 w3 W
  13.   /* USER CODE END 5 */
      W3 y% x) Z5 z1 e
  14. }
复制代码
  j9 p/ }$ l  B8 R, Z

7 M8 \' v- n9 `9 t) w
LED函数的相关配置,可参考前面无系统时相关设定
9 D8 R2 G0 e# b: Y8 C

. c3 m$ Z7 @) v8 N' [补充一下:
9 ?( C4 [1 v# q. t$ s' H    在stm32l4xx_it.c 文件中 SysTick_Handler() 函数,使用了 osSystickHandler();* q- o' E# m0 U. H' H1 U( r
    可借此了解 cmsis_os.c/cmsis_os.h 如何调用 原生函数的,可作为学习参考。
! a! V) k3 z) q9 v% W
- }. X2 C- U$ V. m6 G: O2 V# t4 F. v$ y" [
试验照片:7 N+ _# o7 k9 w( Z. b  i4 b; m& i
LED2灯亮起:
18.jpg

0 d% L4 ]' P4 \" s1 D1 r
Task延迟500ms
17.jpg

! M$ E) ^+ Z; F2 R! Q/ N6 D相关文档:
8 j7 q8 x, |: n《低功耗MCU运行FreeRTOS》培课程的准备内容(一)) {) [2 i8 x7 t8 ^4 Y" @, f$ m
《低功耗MCU运行FreeRTOS》培课程回顾(二)4 U" B3 n: U: t

( R. a/ i' W" B《低功耗MCU运行FreeRTOS》培训课程(四) 创建任务
7 a  N' n) D  j  y" d+ K《低功耗MCU运行FreeRTOS》培训课程(五)信号量实现人机交互
. i7 ?2 @" s/ D, c《低功耗MCU运行FreeRTOS》培训课程(六)消息队列的使用
! L+ Q" `9 ~) _" N4 n9 {) ]

评分

参与人数 2 ST金币 +21 收起 理由
天中雨水 + 1
creep + 20 很给力!

查看全部评分

收藏 1 评论5 发布时间:2018-4-27 23:06

举报

5个回答
myccl 回答时间:2018-4-28 08:22:00
为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗
creep 回答时间:2018-4-28 08:51:19
感谢刚狼哥无私分享。
wolfgang 回答时间:2018-4-28 10:19:09
myccl 发表于 2018-4-28 08:22
9 d; _1 M8 ~2 g' B为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗

0 N+ n" [( r. U% j4 A. P4 W4 ]1 j9 kCubeMX只是提供一个入门的基础配置,
6 ~6 i( u2 w" \, ]) F第三方移植不能仅靠一个工具,如果你需要用FreeRTOS 10.0的时候咋办?
ouy_for008 回答时间:2018-5-6 20:27:53
$ C7 A1 m# K# [# P# j2 a
谢谢楼主
xmshao 回答时间:2018-5-25 14:32:29
myccl 发表于 2018-4-28 08:22
# j* H, p: D0 U1 e; [, ?5 ^; O为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗
发现好多人对STM32cubeMx有误解。- A7 w4 D8 q4 z3 k8 }! P9 M) t

" w0 _3 r: q% @  u, LcubeMx只是个图形化初始化工具,帮你搭建个工程模板。) F% G! {# R& z8 j
; ]' w. W2 h2 e
应用代码得你自己写,还需要编译调试工具啊,TrueStudio就是这个工具。5 n$ t' q. G4 j- k

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版