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

基于Nucleo-L496ZG的FreeRTOS信号量和队列

[复制链接]
寂寞,点燃一支烟 发布时间:2018-4-15 11:21
1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了,# \' _0 ]3 j  |* x3 F% e
    具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 )8 A! G2 J! N# N% i
3 {( z% Q- n/ T
+ Y& r6 y* h7 t/ V& J
/ _" b, v! z( m8 l$ v. i) b
2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子
( b0 }$ d4 s2 {$ D6 p    https://www.stmcu.org.cn/document/detail/index/id-218816?lat3 p6 ?% A/ x+ |# U0 @  B
   led和串口的配置我就不放图了,可以参考别人的帖子,
, r& c5 F5 @8 G2 ]& i3.  FreeRTOS 简单配置。生成IAR工程
) }9 _) V3 U8 a8 M5 K+ M4.在串口文件中  添加printf重定义文件 ,类型就是原子哥的方法( H# x9 |/ ?* g# @
1)# P7 y7 V' `& O  l+ H0 R( M  j# J4 ~
#if 1
5 q& E$ i6 Q3 l# m. _; l; |: I#pragma import(__use_no_semihosting)            
) U: B1 b2 c6 f3 K( o//标准库需要的支持函数                 
) q2 D! p( N: a5 estruct __FILE 3 I- J# X) {- {3 j- }; Z3 ~
{
# ?- H! d& C* ]        int handle;
6 X/ O) V) x  {' Z# `}; 2 Y; c0 v" Z6 G. O4 k. z5 g% S
FILE __stdout;       8 [+ d9 V- d! k% u0 ?& ?  x
//定义_sys_exit()以避免使用半主机模式   
2 Q) X% e5 W  U" s% _void _sys_exit(int x) 0 s& i  A& G* s6 W& _6 n' Y! |) O
{
1 `' T# K. m6 n        x = x; # F0 t0 H' k9 o! l
}
* c; [! L6 W3 r, E//重定义fputc函数 ! I2 K9 O* Y8 t; V4 F' Z+ x
int fputc(int ch, FILE *f)* a3 C2 g; y( N$ ~& A7 L$ C7 u
{         2 j. |, L$ T: U2 q' b. V: ^2 [' y0 P
        while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕     N( d5 u( G$ p" V! l; T& \
        LPUART1->TDR=(uint8_t)ch;      ; w9 r3 o: o9 b  C$ K/ S
        return ch;
3 P8 M' \4 N$ `}" o) M5 A/ y  |2 E; s
#endif
2 c0 C2 S4 |% `5 M
) y- O8 i2 f: t$ L0 c7 f2)
4 `+ j" X3 p4 l  添加测试代码: v2 m3 v" d  r( S8 K5 N5 ]2 K
led任务  0 m% {2 [3 g+ F
void StartDefaultTask(void const * argument)
2 \$ V( ^; v  g0 A# R2 I% p{
4 P. H3 r# Z3 U" a# }  for(;;)
, I5 z7 k$ `6 n' M  {
! ~  H% ^/ s1 O: T& F    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);  r* N) p6 d& ^; S, H  [) H
    osDelay(500);
7 _* |2 I3 w: o/ {4 K4 R  }, G0 a6 ?- Z$ w$ u% j- b9 W6 a
}
: u4 K4 o; [  g: `! m
0 g; J- C, _% F( b1 n% w5 zprintf 代码" L, @0 O, N0 x+ m$ t
/* StartTask03 function */! C7 ^- I- X7 ~! R1 }
void StartTask03(void const * argument)) w( J6 O- D5 v% c
{* G+ W/ i- J3 _6 w8 }
  /* USER CODE BEGIN StartTask03 */
1 U, r) f+ R, ]# T. I  /* Infinite loop */
, f" z/ _# F: X) u1 N  for(;;): G& H% h6 N' v* i% F, |5 Q
  {% X9 u9 R% C. X' g: p
    printf("基于 Nucleo-L496ZG FreeRTOS 培训测试  \r\n");& b8 G; e' s9 u5 U0 x1 O8 \
    osDelay(1000);
! r3 |8 C/ I) f( k/ x8 m/ q6 B  }
0 @$ ]+ \& j) g0 x. Y/ A/ b  /* USER CODE END StartTask03 */  b* i' H, @# [- H8 I: y! u; i
}
1 q" F4 g! F- p- x% W! z& t
/ f# ^3 V# \  K; P1 B6 ?% r. O' S5 g5 结果如下
3 }8 a2 L& I- |1 w& c! R
5 U# ]& z* E5 P9 g8 f' q; l3 g

8 A$ [6 m( C$ {2 T8 L  @4 l! b3 ^

4 [3 I9 F; C. ?3 I4 c1 K7 S6 T
8 z" C( ^6 e; \3 K. a- Y7 v( q, P8 _. j. ]+ Q: d; E4 D1 L4 P
  c# j+ E. j1 f  n  C: O
" [+ z8 |, ^! A6 `% e
/ q" e* Y6 l4 u9 q4 X/ K8 Z
/ z% Y- d: \# [7 b. o! z
收藏 评论3 发布时间:2018-4-15 11:21

举报

3个回答
寂寞,点燃一支烟 回答时间:2018-4-15 11:23:14
测试功能,队列后续更新
寂寞,点燃一支烟 回答时间:2018-4-16 23:57:38
添加源代码  消息队列 按按键会发送    接收到串口打印出来

FreeRTOS.rar

下载

13.97 MB, 下载次数: 11

队列

zero99 回答时间:2018-4-17 14:52:20
感谢分享,请汇总到4月技术原创+ g+ m5 \7 a, f) n9 E/ @, Y5 l, w1 L
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版