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

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

[复制链接]
wolfgang 发布时间:2018-4-27 23:06
本帖最后由 wolfgang2015 于 2018-5-17 22:51 编辑 9 K8 \8 b. |. }( I- L+ B

) B3 A" h8 `" _2 W- E在线培训上用的是 IAR 环境搭建的FreeRTOS环境,我看论坛里对STM32新出的Atollic TrueStudio For STM32的工具使用者不是很多,借此机会把TrueStudio工具搭建STM32的方法介绍一下:
# ]7 q; {" _& R3 M" T: _2 z' o! @安装过程略,Atollic官网下载安装程序,下一步下一步就能安装成功。
9 Z5 r+ i; c& n. \  v1、安装好 TrueStudio 后,运行 TrueStudio , 在菜单栏中选择"New--->C Project"新建项目
0 r! C. L" i; ]. g, h 08.jpg
3 O& u. x+ I7 q9 J- c
1 F/ J. C( C1 ~$ G' [
& }6 P) Z, o3 G4 ?. Q2、选择一个嵌入式C项目,并配置为Atollic ARM Tools4 K1 U# B, C& i+ {. B
09.jpg 6 R1 F/ w, j  T; {; A# H

1 R6 D; d7 n' M  k3、选择一个MCU 型号,并选择浮点、浮点单元、代码为之、指令集等参数。9 p, \- S6 N: G& c7 z: P
手边的开发板是这次在线活培训活动提供的 Nucleo-L496ZG,* j" e9 B# J9 o" E* J
在硬件配置窗口的L4系列MCU下选择STM32L496ZG,(这里工具中没有提供Nucleo-L496ZG的板卡选择,但选择MCU一样能实现本实验) A( D; v4 L* f6 H; Y
10.jpg
( S0 ]% K9 G0 H" a3 q! d$ e4 r& m& M9 }8 L" S: K

( H2 O7 B% q1 @# U" U( h. o) W4、接下来选择项目编译和链接时所用的环境参数。# _3 y2 x9 L+ ]' c
这里要修改默认值,按下图选择“新库”,勾选“生成系统调用文件”的选项,并选择“动态堆大小(缺省)”。其他的默认* P* `, R0 a: N& z$ C2 m
11_1.jpg 1 p5 L- x- `6 T0 J: V

0 ^, M: {4 l! h9 Y6 k$ W) {
* a; f; |/ }2 D, i$ t. n! l. }! z4 \5、选择一个合适的下载调试工具,这里Nucleo-L496ZG开发板上具备ST-LINK,所以选择“ST-LINK”
. D  ]+ @: X. B2 f/ a 12.jpg . g% p. o& n& ^# W$ P

5 o* g1 W0 e9 v/ D( G: W  h! k6 M: x& l& o% c7 F. i
6、最后Finish后,工程项目就生成了。4 y  p8 G$ e; _9 E0 F; X0 c
13.jpg ) o( ~" F0 @; o( p
6 q! @8 n$ H, O

3 P  {5 ~2 E+ ?  x
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
+ X* G" t! f4 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

+ ^: T% B8 J) H9 d
3 I5 h+ x$ a8 d% b2 b' v
8、最后在项目右键--〉Properties 中,  C/C++ Gennerl ---->Paths ans symbols 中,重新定义Includes文件以及 Source Location即可

/ X0 v! x4 Y1 @% M. `( a$ T6 D/ \7 M3 P+ j
9、项目生成后main.c中 的相关配置可自行添加,不熟悉的参考CubeMX 的生成代码,将以下代码代入到项目中
inc\stm32L4xx_it.h
inc\stm32L4xx_hal_conf.h
inc\FreeRtosConfig.h
inc\main.h
. Y) G8 ^4 p1 ]6 d( ]% B# @
src\freertos.c
src\stm32l4xx_hal_msp.c
src\stm32L4xx_hal_timebase_TIM.c
src\stm32L4xx_it.c

7 Y6 n9 B1 x- S/ S) W% J
引入到系统中,main.c可以靠插入相关函数
这里要说的是,培训建议我们使用原生态的FreeRTOS,在理解 cmsis_os.c/cmsis_os.h 的文件基础上,尽可能的江os_xxxxx函数,替换为x_XXXX的函数或vxxxxx的函数

8 X& D: v) ?0 y% x6 G6 \1 G, c
将Main.c文件中的代码
  1. osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);* h: P9 |/ z9 _
  2.         defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);. e) R( b. I4 w8 u
  3.         osKernelStart();
复制代码
替换为
  1. xTaskCreate((TaskFunction_t)vStartLedTask, //任务函数
    ( u& q; U+ Q4 T8 k- x3 n
  2.                             "LED",                              //任务名称
    1 T$ `* d7 z# z+ R8 U( @6 p
  3.                                 configMINIMAL_STACK_SIZE,           //任务栈大小6 S, O0 }& g# X& r6 D
  4.                                 NULL,                               //任务函数参数4 n# S, w- e1 {1 ?$ |& Z( j
  5.                                 tskIDLE_PRIORITY,                   //任务执行等级
    3 O' D1 ?! j# h7 @+ U& g: d
  6.                                 NULL);                              //任务句柄
    $ ^, `. A, W# w, @1 r( j
  7.         vTaskStartScheduler();
复制代码

1 y  i; Y: E6 S$ y! p( t+ t5 k: J' k4 }7 E+ S3 z) s4 f* |" q
在vStartLedTask 任务中添加相应的操作函数
  1. void vStartLedTask(void const * argument)
    1 y, C9 P; b8 ^2 T. I
  2. {% u3 p  G* q$ F- A8 }
  3.         uint8_t sta = ON;
    + y7 P3 p0 K: R: ~/ M. ~) @9 [
  4.         uint16_t delay = 500;
    ! m1 D& H4 R) _5 k* u+ R* U
  5.   /* USER CODE BEGIN 5 */+ t/ Z9 O( d0 ^/ O
  6.   /* Infinite loop */" }3 {+ j9 q, |, }# e
  7.   for(;;)* I$ i" g. ^- c& |) y' e0 f
  8.   {
    : ]! y1 _. r$ A( A8 s2 L
  9.           LED(sta);
    " M4 ~$ U; w5 y7 N- q8 ~
  10.           sta =!sta;" l0 E5 C# k7 P3 J% j, _4 I5 t
  11.           vTaskDelay(delay / portTICK_PERIOD_MS);
    # k3 |' A0 ]- G, q7 \' f
  12.   }
    5 j, o# b# m3 E  O' A$ n
  13.   /* USER CODE END 5 */
    ' ]& C, J/ R2 X% z* H8 S
  14. }
复制代码

- Y0 H% R$ l( X8 h  Q
- _5 }" c3 F) d+ B+ p
LED函数的相关配置,可参考前面无系统时相关设定
: l/ \" I9 H4 r1 H
8 U0 s9 }4 D5 x
补充一下:& [2 X8 y8 W4 @8 Y5 G. `! G: q
    在stm32l4xx_it.c 文件中 SysTick_Handler() 函数,使用了 osSystickHandler();  V* I$ X/ ~' e  a! H- n) O4 e* r
    可借此了解 cmsis_os.c/cmsis_os.h 如何调用 原生函数的,可作为学习参考。( |1 E9 `$ {0 g2 ~
7 y$ l9 h( v2 n- H$ p6 T5 T9 n1 {
1 s/ _+ x6 ?2 \+ J4 i3 A
试验照片:- }! L. R2 V8 }: p* x
LED2灯亮起:
18.jpg
$ y5 h* @  T2 p6 ^
Task延迟500ms
17.jpg
- M7 D" q# C) I4 G) g' L! ^1 P
相关文档:) M- ?9 Y) q& D: f& D" J) W
《低功耗MCU运行FreeRTOS》培课程的准备内容(一)+ H* ^& v- N, i$ b4 `% d3 i
《低功耗MCU运行FreeRTOS》培课程回顾(二)
1 e+ ^+ ]% c. @0 r( @0 j/ H
" @7 M: v! u" }5 t) T$ E- h《低功耗MCU运行FreeRTOS》培训课程(四) 创建任务3 W" H1 O. D: L- M5 K0 b  X
《低功耗MCU运行FreeRTOS》培训课程(五)信号量实现人机交互
8 C' o0 Y+ y9 P+ n- [: d: u《低功耗MCU运行FreeRTOS》培训课程(六)消息队列的使用8 j5 |. N  H# U  J2 ?

评分

参与人数 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
/ p3 ^4 R0 W! ^- A为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗
) T/ \( f- h) t0 e0 P6 a- I; r
CubeMX只是提供一个入门的基础配置,( C+ B' l: J$ ~% I4 X0 N
第三方移植不能仅靠一个工具,如果你需要用FreeRTOS 10.0的时候咋办?
ouy_for008 回答时间:2018-5-6 20:27:53

" E2 W  E3 Y& V' \! P5 {谢谢楼主
xmshao 回答时间:2018-5-25 14:32:29
myccl 发表于 2018-4-28 08:22$ a9 z! p8 a2 C8 v# V/ ]0 m$ t4 v! ?
为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗
发现好多人对STM32cubeMx有误解。7 v* o4 l4 D9 X+ ~( c% [
- z3 V/ Q3 o) w
cubeMx只是个图形化初始化工具,帮你搭建个工程模板。
" P# Y! F6 `( K" T8 f- g
  R+ k/ n% E6 Q* y  y/ E3 @" s应用代码得你自己写,还需要编译调试工具啊,TrueStudio就是这个工具。! b9 d/ n) n7 v, j+ Z

所属标签

相似分享

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