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

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

[复制链接]
wolfgang 发布时间:2018-4-27 23:06
本帖最后由 wolfgang2015 于 2018-5-17 22:51 编辑 ( l7 C3 K+ \# y- t
0 L( h  z: ]6 \, U, Y  n+ L& {
在线培训上用的是 IAR 环境搭建的FreeRTOS环境,我看论坛里对STM32新出的Atollic TrueStudio For STM32的工具使用者不是很多,借此机会把TrueStudio工具搭建STM32的方法介绍一下:7 ^) g* f8 t3 x% Y
安装过程略,Atollic官网下载安装程序,下一步下一步就能安装成功。. s5 |& {  n+ ?0 h
1、安装好 TrueStudio 后,运行 TrueStudio , 在菜单栏中选择"New--->C Project"新建项目( Y, b/ h5 Y/ n, [
08.jpg % E2 W! o& Z; E, y# q6 e1 m
2 [) }7 T0 x  v7 A1 q
8 x; M2 t' g+ @* F  Q, X* p3 B& v- P
2、选择一个嵌入式C项目,并配置为Atollic ARM Tools
, k. c* M- v) E 09.jpg $ A; ~8 \8 C$ o% g8 L  G' }2 L. p
( Y- @' _. ?+ g4 r8 g# x
3、选择一个MCU 型号,并选择浮点、浮点单元、代码为之、指令集等参数。
% X( Q  t% y+ r, H1 Y; ]/ w8 n手边的开发板是这次在线活培训活动提供的 Nucleo-L496ZG,1 \2 d& u+ J" a. @. o/ b, i
在硬件配置窗口的L4系列MCU下选择STM32L496ZG,(这里工具中没有提供Nucleo-L496ZG的板卡选择,但选择MCU一样能实现本实验
* p7 h5 k$ }7 o4 m4 l& l7 _! u$ b 10.jpg
6 O2 l. }2 b( \
! d! c0 z6 |- s; D) j
5 @* |" Q# U$ v  X4、接下来选择项目编译和链接时所用的环境参数。
% Y) {" {$ F4 q  A# q这里要修改默认值,按下图选择“新库”,勾选“生成系统调用文件”的选项,并选择“动态堆大小(缺省)”。其他的默认1 b9 J3 Q+ X' i( v- U
11_1.jpg * p* V( ~9 ^' N6 W
8 ]# O3 u" _2 }: j# i0 e- W0 b
  |% ?5 K3 ]+ f
5、选择一个合适的下载调试工具,这里Nucleo-L496ZG开发板上具备ST-LINK,所以选择“ST-LINK”0 P! i2 v- y& T/ T/ u  A
12.jpg
* l; y& `& |) I7 o' S# B6 T' |& C# {) }; b: r- m
9 m; x$ {4 B, s6 f1 W8 d" S; l
6、最后Finish后,工程项目就生成了。
/ i+ c$ t" O" R7 j* X3 d/ [3 G  v& H 13.jpg
( a# [# o/ v# U1 l
9 w3 k( y, s' O  N. V$ `3 h
. D- o( @) E; r. B( v/ z
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
: {8 Q( L" z7 ]& V6 z& Q
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

+ V2 H) W, f: ~# @/ l; b$ ~1 k0 h5 Y0 x' K" z, A% G" R
8、最后在项目右键--〉Properties 中,  C/C++ Gennerl ---->Paths ans symbols 中,重新定义Includes文件以及 Source Location即可
4 f5 M% Q3 ~8 ~8 ?
3 a, a- Q- L& ]7 y, U
9、项目生成后main.c中 的相关配置可自行添加,不熟悉的参考CubeMX 的生成代码,将以下代码代入到项目中
inc\stm32L4xx_it.h
inc\stm32L4xx_hal_conf.h
inc\FreeRtosConfig.h
inc\main.h

! s& }3 i& n7 P9 T4 n5 N
src\freertos.c
src\stm32l4xx_hal_msp.c
src\stm32L4xx_hal_timebase_TIM.c
src\stm32L4xx_it.c
6 O* `, v, c+ E; K5 d$ E" v
引入到系统中,main.c可以靠插入相关函数
这里要说的是,培训建议我们使用原生态的FreeRTOS,在理解 cmsis_os.c/cmsis_os.h 的文件基础上,尽可能的江os_xxxxx函数,替换为x_XXXX的函数或vxxxxx的函数
% R8 X+ T2 W) Z$ F
将Main.c文件中的代码
  1. osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
    5 g8 G6 _! q! c* w$ T5 |( @, C
  2.         defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);1 }0 Q$ C- n& D) P8 q" d  m
  3.         osKernelStart();
复制代码
替换为
  1. xTaskCreate((TaskFunction_t)vStartLedTask, //任务函数. c. Z, v! U6 K* F. z5 W& c5 C
  2.                             "LED",                              //任务名称2 }: Q2 d3 v) i$ h: c
  3.                                 configMINIMAL_STACK_SIZE,           //任务栈大小8 K" ~+ I* b8 p
  4.                                 NULL,                               //任务函数参数1 t  e5 r. Y3 j& q; A3 a
  5.                                 tskIDLE_PRIORITY,                   //任务执行等级
    , B7 U8 a4 c+ y6 i' W
  6.                                 NULL);                              //任务句柄' J5 d5 g) k2 p
  7.         vTaskStartScheduler();
复制代码

  l6 G+ B" U9 }+ n5 [" _7 D* G, Y: d! I2 e* [. f/ `/ R( Y
在vStartLedTask 任务中添加相应的操作函数
  1. void vStartLedTask(void const * argument)3 a* }. b' {9 u, l9 T, L
  2. {
    ! y; P9 H# {$ s- M9 Q/ q5 l
  3.         uint8_t sta = ON;7 {- R0 D$ ]* l) q
  4.         uint16_t delay = 500;
    + k" u3 K0 M2 R/ I6 d6 j; g
  5.   /* USER CODE BEGIN 5 */( I; T, G5 n( y
  6.   /* Infinite loop */0 M6 I# n0 P# ], ~! P, ]
  7.   for(;;)
    8 |5 l8 c0 V% P# M
  8.   {( e7 K' S+ l3 A8 w) a
  9.           LED(sta);$ V* Y, O0 J3 Z
  10.           sta =!sta;
    ) ]! T2 Z/ V4 o6 i4 T5 W
  11.           vTaskDelay(delay / portTICK_PERIOD_MS);
    8 L1 {, f; [+ o; o6 z
  12.   }
    8 ]2 o. l" A* Y+ B6 s4 x: _1 H; r" Y9 u
  13.   /* USER CODE END 5 */
    8 n! x; [/ \* {
  14. }
复制代码
" d' u/ \/ [! j6 q$ C7 h2 M4 g

; |2 Q$ [# n6 i/ {* O: u) w: \
LED函数的相关配置,可参考前面无系统时相关设定

4 z' L+ S6 F5 x$ @! ]  B( Q0 T- F" o6 ~! z* n
补充一下:) I7 J/ }; f5 T4 Y2 [1 I/ w
    在stm32l4xx_it.c 文件中 SysTick_Handler() 函数,使用了 osSystickHandler();
5 }: U% {% C9 |; S    可借此了解 cmsis_os.c/cmsis_os.h 如何调用 原生函数的,可作为学习参考。
4 E3 S1 G3 G' _- E# F2 k7 V& K4 ^6 f3 Y' T7 r" U
; T) D) P7 s7 K% w0 a
试验照片:
6 _! H* z6 Y- C) `1 ]4 Y; c5 W% P, s; t- I
LED2灯亮起:
18.jpg
0 B& C# P  ?; ?/ `: E
Task延迟500ms
17.jpg

' U! G5 Q( p- G1 L9 y# y相关文档:
* t7 w, }: G; {% S! P' i; |《低功耗MCU运行FreeRTOS》培课程的准备内容(一)
3 _- I. {) d/ x& |& z) Q5 S《低功耗MCU运行FreeRTOS》培课程回顾(二)' d2 m& {, q2 ?$ s; e

! m8 E8 o: B: u《低功耗MCU运行FreeRTOS》培训课程(四) 创建任务
. H( s3 ^: N) p: q《低功耗MCU运行FreeRTOS》培训课程(五)信号量实现人机交互/ Z+ @! V- M" B! j# `$ Q+ T8 ^
《低功耗MCU运行FreeRTOS》培训课程(六)消息队列的使用
3 S" E/ a5 p, A( }/ j: s

评分

参与人数 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
' R& t- h: J5 s) L4 i为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗

: ~4 r0 A5 j. r1 P( Y8 l9 hCubeMX只是提供一个入门的基础配置,! _+ Y5 F9 V7 h( s" `+ N' ]
第三方移植不能仅靠一个工具,如果你需要用FreeRTOS 10.0的时候咋办?
ouy_for008 回答时间:2018-5-6 20:27:53

& _+ Y: H, e9 f$ G6 Y& t1 @5 S, K谢谢楼主
xmshao 回答时间:2018-5-25 14:32:29
myccl 发表于 2018-4-28 08:22
4 T2 o+ k6 t( _: F为什么用这个Atollic TrueStudio For STM32,有什么好处啊,直接CUBEMX不好吗
发现好多人对STM32cubeMx有误解。
# H) |! `3 F) Z8 U4 p  H! C: x' R% x8 G2 ], Q0 N$ D3 y7 \
cubeMx只是个图形化初始化工具,帮你搭建个工程模板。+ Q6 T4 _, v5 l+ z/ c4 e

6 E8 B( Z/ i4 a8 G  H9 K- u应用代码得你自己写,还需要编译调试工具啊,TrueStudio就是这个工具。
/ H6 o4 a- c8 M# J. s  C

所属标签

相似分享

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