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

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

[复制链接]
寂寞,点燃一支烟 发布时间:2018-4-15 11:21
1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了,
. X2 h# P# I% q( l0 F: r    具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 ): p7 {7 y7 k1 a3 M0 o4 M4 u

; T6 A; |0 D5 C% {$ D
- P9 e( E0 J( ]- ~3 p
; G& \6 G. o. ^, b$ O- X2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子
) ^, n" }. ?' p" g8 i    https://www.stmcu.org.cn/document/detail/index/id-218816?lat
+ T) @3 V+ s6 ~  i% [! {   led和串口的配置我就不放图了,可以参考别人的帖子,+ ~+ K! B  C' g& z) |
3.  FreeRTOS 简单配置。生成IAR工程5 W  h' G; e, X" W9 L
4.在串口文件中  添加printf重定义文件 ,类型就是原子哥的方法! i" X$ Z0 j0 T% o$ X; i
1)* I( m- x8 w0 Q7 R7 A) _2 ^
#if 1
& P( F* x5 |0 b#pragma import(__use_no_semihosting)            
  }9 _1 f1 k: j% J+ S4 P//标准库需要的支持函数                 
/ v$ L' N. Z" e7 mstruct __FILE
9 e! Z5 f+ y$ n7 o6 X{
; a3 u* [) @, J  D        int handle;
' S( C! k" _4 U+ o' d4 T};
/ x: w0 U: Q! U) }+ P  |FILE __stdout;       . ]0 M% I8 U* B
//定义_sys_exit()以避免使用半主机模式    6 k7 h5 l3 C* i9 y3 g6 i2 H7 z
void _sys_exit(int x) + b9 \! P* C" A7 D3 |; j
{ 8 @' y6 ]- ^" q" l! p
        x = x;
9 {. W0 @2 u6 Z& c% H5 v# d+ `! c}
7 u% S+ ^# I* z& q. u& i0 P//重定义fputc函数 , W- R9 Z8 [. K5 ~
int fputc(int ch, FILE *f)4 Z5 I9 H6 J  L, l
{         
) V. Y  n! n( {; E% \: V6 ^        while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕   7 I: D4 R2 [8 G6 ~' b6 @
        LPUART1->TDR=(uint8_t)ch;      
* z7 l6 d1 O) ?        return ch;/ ]  e9 ^1 f8 \) S
}
8 I, L' t+ o$ d6 W3 h3 _1 t4 R! z#endif 6 F9 K* _2 f- I' H* z, T! P! b
% C; O- }# c* S( K9 \+ K! L8 t+ \
2)( ?' Q  h9 M  N' z
  添加测试代码
( l8 \* ~: E& s. e6 aled任务  
  X7 T5 \$ {1 c& C  \$ F  ]void StartDefaultTask(void const * argument)
# F  d9 ]4 v- s& R6 s. D6 f{6 F7 M! {( n6 a- }. s: b% q
  for(;;)
- @4 }+ h8 X. Q3 a  {0 y" p$ s+ R+ [* A
    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);6 N2 p2 A  z% }! e
    osDelay(500);
! X% s7 z9 D% l; [  }- f+ q( A+ _: M/ C' e
}
6 X) F$ B3 m$ D( T2 @6 w8 p6 N  z$ }7 p' O9 t
printf 代码
/ m  g: U( n+ x/* StartTask03 function */
8 @- \# d! |. J  `" \2 ]/ ^void StartTask03(void const * argument)
9 ~) z5 G) t  K9 [8 S{! Y: t5 v0 w% W/ h7 p4 e
  /* USER CODE BEGIN StartTask03 */
6 s* p, V: z8 y1 o! k, {  /* Infinite loop */* P6 E/ ^  l0 _& G7 l
  for(;;)# t3 n/ f. X- [" K8 X
  {$ I3 N2 g' Y$ _# W
    printf("基于 Nucleo-L496ZG FreeRTOS 培训测试  \r\n");9 A( r2 Z4 w* I5 c
    osDelay(1000);
/ w' J* m# [, p4 E. {. }3 e  }
$ k& h! K& g1 E5 @+ H  /* USER CODE END StartTask03 */  X+ s2 e" Y) s
}
( r5 w3 \* Q' ^- _5 y2 F3 T  d2 K! X8 T9 a
5 结果如下8 z3 _2 M7 y) z& |+ P& w
1 `) l1 p* J2 B* S5 Z: [# _, D
- \/ K  v" k5 M, Y! S5 T+ U$ D

' ]  N# _  _+ o; u9 O
0 B- M7 k; a. C2 {! s: {2 q
  F+ ]* i' ~# K2 _! }6 Y4 f- }4 V/ P, r8 ?' l; |
0 O7 J' ^( c9 u- @( L/ I* R- B

. G2 ]4 y) W8 b9 b" c1 V0 M8 ?5 x7 f$ d- Y8 G% ~
7 ?1 m6 A8 z( ]# l% n, g$ U/ i
收藏 评论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月技术原创- M( M* C5 r9 M. X6 [
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html

所属标签

相似分享

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