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

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

[复制链接]
wolfgang 发布时间:2018-4-27 23:06
本帖最后由 wolfgang2015 于 2018-5-17 22:51 编辑 3 ]) P: K/ H* }: a% u2 u% j8 i
* D+ ]% ^2 b$ C4 p. Q( b( `
在线培训上用的是 IAR 环境搭建的FreeRTOS环境,我看论坛里对STM32新出的Atollic TrueStudio For STM32的工具使用者不是很多,借此机会把TrueStudio工具搭建STM32的方法介绍一下:
. b, |' ]# y9 W. c7 k( ^安装过程略,Atollic官网下载安装程序,下一步下一步就能安装成功。
# c  n/ e8 r3 A! V  z1、安装好 TrueStudio 后,运行 TrueStudio , 在菜单栏中选择"New--->C Project"新建项目9 V# C# M4 D2 k  P, C, b* {
08.jpg
- [; u2 t( j3 U+ }1 v  }! e$ L: i' B
( o- u0 T& V$ S
2、选择一个嵌入式C项目,并配置为Atollic ARM Tools
4 x2 s3 |. E  d' E/ X 09.jpg $ a+ n+ y$ f" T1 M
- T# m7 l9 t0 F# U* u. Z7 b7 E5 a& i
3、选择一个MCU 型号,并选择浮点、浮点单元、代码为之、指令集等参数。
, `) T' U  h+ ~手边的开发板是这次在线活培训活动提供的 Nucleo-L496ZG,
# }& s+ K1 c. q7 W3 M/ E在硬件配置窗口的L4系列MCU下选择STM32L496ZG,(这里工具中没有提供Nucleo-L496ZG的板卡选择,但选择MCU一样能实现本实验$ V) A% n/ z9 u2 [; Z, K9 H. h% E
10.jpg
9 o8 {( A3 R2 z9 |
4 l  G& T2 j, z- Y! Y" \6 z' w3 `2 S
7 I" |( D  E( ~3 D6 i, D2 x' {4、接下来选择项目编译和链接时所用的环境参数。
/ K. R4 d0 w: Y. \这里要修改默认值,按下图选择“新库”,勾选“生成系统调用文件”的选项,并选择“动态堆大小(缺省)”。其他的默认/ T) H+ E5 s7 x$ S
11_1.jpg
( ~" f4 x8 u' l) Y# s5 Z- J+ M& m: ^7 T& ~2 m( n5 @8 o) c( Y1 z5 _

1 k  b% R: D) Z3 A, A5、选择一个合适的下载调试工具,这里Nucleo-L496ZG开发板上具备ST-LINK,所以选择“ST-LINK”
4 f* S2 r/ e2 Y: I. w 12.jpg " I; y- V3 o; r4 ~5 d

- h" P( `+ N/ C$ u0 R9 b4 y
. V7 G0 e$ k# ?. ^; w# f  a6、最后Finish后,工程项目就生成了。
* C2 z' L* X  n5 _: ?. G 13.jpg 6 G0 p( Z9 x! t( _5 P2 x. g% N' u

$ \7 ~9 U$ b1 z3 c* t& F. v/ E! I& I4 V# K# T
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

+ c& k6 \8 X/ X. o+ X: t: d
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
4 L0 z. o, I- w( Z- k: T2 J7 Q" E

( L1 r) F2 i; q5 ]' ~/ w' H3 |/ _
8、最后在项目右键--〉Properties 中,  C/C++ Gennerl ---->Paths ans symbols 中,重新定义Includes文件以及 Source Location即可
: y' z, b  l' R0 u" K, i
- D9 D/ ^2 t' k8 ?) {" V& @: e; h, |
9、项目生成后main.c中 的相关配置可自行添加,不熟悉的参考CubeMX 的生成代码,将以下代码代入到项目中
inc\stm32L4xx_it.h
inc\stm32L4xx_hal_conf.h
inc\FreeRtosConfig.h
inc\main.h
, b) `. _& T; c. \% m
src\freertos.c
src\stm32l4xx_hal_msp.c
src\stm32L4xx_hal_timebase_TIM.c
src\stm32L4xx_it.c

& y' q/ x$ N) O6 R* m
引入到系统中,main.c可以靠插入相关函数
这里要说的是,培训建议我们使用原生态的FreeRTOS,在理解 cmsis_os.c/cmsis_os.h 的文件基础上,尽可能的江os_xxxxx函数,替换为x_XXXX的函数或vxxxxx的函数
9 o4 Y. X: D6 X: b* \
将Main.c文件中的代码
  1. osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);4 U+ Q: u3 z: M$ w
  2.         defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);) c" l# ^/ o' u- H, @
  3.         osKernelStart();
复制代码
替换为
  1. xTaskCreate((TaskFunction_t)vStartLedTask, //任务函数* y7 @% z) S7 M, }) D
  2.                             "LED",                              //任务名称
    3 V9 j! J+ }2 T/ Y+ }
  3.                                 configMINIMAL_STACK_SIZE,           //任务栈大小6 u( C, j2 a) h. m0 M8 H
  4.                                 NULL,                               //任务函数参数! q2 `( @9 {/ f9 |* E
  5.                                 tskIDLE_PRIORITY,                   //任务执行等级) K7 @. A8 m+ n
  6.                                 NULL);                              //任务句柄) L- u# n2 i, L, ]
  7.         vTaskStartScheduler();
复制代码

2 `+ R2 h4 h+ I8 d$ m& T# \
6 e  g& c& b5 k1 ~
在vStartLedTask 任务中添加相应的操作函数
  1. void vStartLedTask(void const * argument)+ O: E+ G: v6 D: S5 y
  2. {
      `2 x0 W+ |( }9 [+ `6 ?
  3.         uint8_t sta = ON;
    2 O5 I/ B7 J7 N+ w
  4.         uint16_t delay = 500;: R' T0 ?; y9 C2 j, [
  5.   /* USER CODE BEGIN 5 */3 u! y0 K$ e( C# R' k
  6.   /* Infinite loop */
    " K9 H0 N7 t5 h- D6 a
  7.   for(;;)- _1 W4 M# J  k" p/ u  S
  8.   {4 }* n8 j6 e' o1 a
  9.           LED(sta);
    1 N& g- D2 V' j1 s3 |* G, k
  10.           sta =!sta;
    . n! W( I5 Q3 Z
  11.           vTaskDelay(delay / portTICK_PERIOD_MS);) ~! P, \4 L* h" H3 N- p0 U9 ~) Z
  12.   }8 y# P( f- ]; I' f. J4 p
  13.   /* USER CODE END 5 */, ~0 E- P/ l! _9 n( R7 k. x
  14. }
复制代码
1 u6 A8 i8 i4 f2 |; O% L; F, w

# w/ L/ e0 f: C+ ^" a% z% U$ U
LED函数的相关配置,可参考前面无系统时相关设定

! {: y) i  f* D$ F! [$ v, @
2 J  q2 w( U; J补充一下:" j1 t7 ^9 Z# J, M% n
    在stm32l4xx_it.c 文件中 SysTick_Handler() 函数,使用了 osSystickHandler();, l7 R2 `$ T% M9 [
    可借此了解 cmsis_os.c/cmsis_os.h 如何调用 原生函数的,可作为学习参考。
5 K1 j/ F( @4 T. Z" }
3 ]7 Z8 c1 ~  }2 f# p1 P/ a; R" \( b* d$ a! w+ n
试验照片:( z9 S1 B& `9 K8 M% b9 V3 p
LED2灯亮起:
18.jpg
$ s, {# P- c* ~6 }8 t5 P1 o# c
Task延迟500ms
17.jpg
! I- M9 \8 A) j$ _) _. p! p
相关文档:3 z; }1 o0 J! |, {1 }9 m+ o
《低功耗MCU运行FreeRTOS》培课程的准备内容(一)
  \( t8 g# ~$ \" N# f( s《低功耗MCU运行FreeRTOS》培课程回顾(二)$ }5 K- H( q7 U/ Y# \

6 a5 i6 q8 u, `6 Z) u+ Z《低功耗MCU运行FreeRTOS》培训课程(四) 创建任务
, q, B( u  ]  ~; A《低功耗MCU运行FreeRTOS》培训课程(五)信号量实现人机交互! G( ]8 u  B; N
《低功耗MCU运行FreeRTOS》培训课程(六)消息队列的使用
! \5 H8 ]/ }# A3 e9 E" l* `8 w: K; a

评分

参与人数 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
: l- j2 h* S# Q( `3 L1 h9 a/ N8 M; b为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗

: N& {+ W/ _' m, d0 `: Y' a5 nCubeMX只是提供一个入门的基础配置," Z  k( i" G: |7 o
第三方移植不能仅靠一个工具,如果你需要用FreeRTOS 10.0的时候咋办?
ouy_for008 回答时间:2018-5-6 20:27:53
1 G6 Q1 U8 f; y
谢谢楼主
xmshao 回答时间:2018-5-25 14:32:29
myccl 发表于 2018-4-28 08:22& N8 ?7 R: r- g; e: Y8 @7 p" [; d
为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗
发现好多人对STM32cubeMx有误解。
- m% K! x& j% Z5 |" a
5 C1 ~+ \; A2 O" Q0 \3 ucubeMx只是个图形化初始化工具,帮你搭建个工程模板。  n  l; o# E: x! f

( f/ x: F$ E" j: ]5 P% M# e应用代码得你自己写,还需要编译调试工具啊,TrueStudio就是这个工具。( ^7 C! _$ c/ r0 S+ S

所属标签

相似分享

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