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

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

[复制链接]
寂寞,点燃一支烟 发布时间:2018-4-15 11:21
1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了," }% H" o1 L& I8 _+ K, x2 e
    具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 )
# R- o: R3 w3 a6 g' n) b3 j! _$ R  {8 l" I! s2 q1 v' X

! f, n* L- g) }3 s9 N& Q" x* E+ _/ q" [* x4 w# C- ~# X% I% v7 X' B
2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子
, M. a3 D! }" l7 n- g/ w- o( L    https://www.stmcu.org.cn/document/detail/index/id-218816?lat& F. z1 D6 A1 q, y& d
   led和串口的配置我就不放图了,可以参考别人的帖子,6 u+ T& l! w* Q' @4 d6 p; q
3.  FreeRTOS 简单配置。生成IAR工程) `( S" B% P* c" ~
4.在串口文件中  添加printf重定义文件 ,类型就是原子哥的方法
6 w9 b5 m. K) A' c5 M; Z1)
  S4 Q' m( i, Y# M# b#if 1
- e1 a( b6 N6 O% |#pragma import(__use_no_semihosting)             - i; O$ v1 m/ ^$ b
//标准库需要的支持函数                 5 t. P/ j; J3 R  ]; i% Z
struct __FILE
( ~2 ?- g) e4 e* o5 o& k{
" u% F5 Q5 a9 Y. n( k3 S2 s        int handle; " |1 }8 y) @) u* U( X
}; & Z. Y" J9 K; ?: v
FILE __stdout;       ; E0 {! a( i- M7 ^1 n2 K: N
//定义_sys_exit()以避免使用半主机模式   
# A; s/ x+ o$ `7 a: Cvoid _sys_exit(int x) . S; z% Q/ t+ y9 J0 m# t
{
. g0 R2 ~& h5 z6 X        x = x; 0 \7 @" |- r! H, U( j
}
6 |! x5 D8 F$ P- D3 i: q. m7 ~8 c# g//重定义fputc函数 & o9 `1 O( u: S- @6 J) u& u
int fputc(int ch, FILE *f)' R. M: {0 O, _* M7 b
{         3 f$ U6 Z3 q4 f( f9 S( q' i( E
        while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕   % r5 v$ P5 L( Z) y, _% D: l
        LPUART1->TDR=(uint8_t)ch;      
: Q2 R. y; e) q( U3 g  L# Q; u  J) K% `        return ch;
7 C0 W9 F' J9 m. |6 P, E5 O! ~}+ R7 ?# V, I% L' `: ^: e
#endif 2 f3 m0 M* F* q+ n  z) d7 _

' N" J! v5 B0 C) i) }) D/ A2). x/ C, }( O" V% ^3 i% F0 x& q+ @
  添加测试代码
: g. }# ?4 T1 v* p+ Tled任务  
5 e7 D* a3 N) o$ K6 F5 jvoid StartDefaultTask(void const * argument)
4 n  m: z1 z+ \+ }; v  ]$ |! I{
9 s: D- E+ `# I7 G  for(;;)3 f1 \- j5 E) o: l2 l
  {
% N9 S% ^5 r* {9 ?    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);6 \. `% ?; y' C: W" n% z3 X; p
    osDelay(500);
$ `2 b" g: [, O, L  }, h5 U' X0 C7 g9 U4 J, p$ V, `, x
}( T! i! {0 l1 X9 H( w0 j

& k: ]- ?: [! R  P' d. e# Gprintf 代码
0 g/ k- n) h8 \1 ?! ^/* StartTask03 function */
$ A: a* F4 c( U5 B/ p3 jvoid StartTask03(void const * argument)
; |& f0 P( v2 y9 q{
  s6 Y0 L: u% ~9 r  /* USER CODE BEGIN StartTask03 */5 W, d/ l) J" X7 s* O
  /* Infinite loop */
7 h3 F& f, F' J2 q3 P( h& x+ [  for(;;)' v- G1 P; A. a
  {/ a% j. t: B& G& C
    printf("基于 Nucleo-L496ZG FreeRTOS 培训测试  \r\n");
" D; E7 X- q6 I8 |5 K1 y5 D    osDelay(1000);( e7 G8 l. G" Y. ]
  }
. E- j& j7 E: H9 ?% N  /* USER CODE END StartTask03 */
( K! O' X1 l  f3 y: Z+ N}
1 e' E1 }; e9 S4 {5 I) x$ `, ~4 b& Y% r9 V" l8 c) d
5 结果如下) k. X9 d) ]8 i2 `4 x
2 J9 ?& D' c# ^9 C) `
- Q) R7 l( ~+ G9 f% o1 Q
' `/ x* [; H9 R1 K8 I' s$ L3 \

6 V4 Z5 k' q& V: [7 K" A5 X4 e* f; q( ^: [; ]1 x. W* P* t

2 q. d5 K5 W3 k& e
8 n& n0 N! o4 \  z* E4 M; G
2 C% t8 Q" I$ L% V( d( B
( k+ n% I% J! j9 g7 o& L$ u0 ^! o8 p# u# {7 {
收藏 评论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月技术原创
  \$ [) q0 @: R* ohttps://www.stmcu.org.cn/module/forum/thread-615497-1-1.html

所属标签

相似分享

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