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

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

[复制链接]
寂寞,点燃一支烟 发布时间:2018-4-15 11:21
1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了,
& J/ {& d% \6 h9 K    具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 )
8 p' O& S5 z. {3 I6 Y
6 ?! C6 u% G' Y' S: |0 a$ Z
1 Y  T  C0 A5 m4 ]& r( L. d0 v  ~2 G3 \6 S* X5 o) L
2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子* y+ A/ h3 C/ w
    https://www.stmcu.org.cn/document/detail/index/id-218816?lat
. j7 W+ U1 h0 {" |8 B, U( v   led和串口的配置我就不放图了,可以参考别人的帖子,0 r% k' h- a9 v/ ~
3.  FreeRTOS 简单配置。生成IAR工程
' s. K4 y& z% m4.在串口文件中  添加printf重定义文件 ,类型就是原子哥的方法7 m4 x# a0 M2 P; j( c
1)
+ T+ C$ @6 S# Q( F  J#if 13 b# a/ i& U% ?  M$ n# V9 s
#pragma import(__use_no_semihosting)             & n# g6 P5 n7 d' w$ S
//标准库需要的支持函数                 
$ v, E2 ^, }. w7 u% ~: z3 Vstruct __FILE
- R( e8 Z/ z% [0 G1 Z' C  e5 A{
7 P" K% O4 g% s6 @) D        int handle; 8 f' q! g4 i) A% R; \
};
  A3 x; c3 m+ F, ]1 f* f3 \FILE __stdout;       & ]9 j2 E' Z3 s! B
//定义_sys_exit()以避免使用半主机模式   
: }6 X( ~" f1 U. S" H3 Uvoid _sys_exit(int x)
8 J- }- s5 Y% }2 g, ]! O9 d- g{ 8 O5 t' [0 I, s/ N% \3 r& p" g
        x = x; 1 A3 D! _' v: U" K, m! H* H5 ?
} 7 d! y5 \4 \  O
//重定义fputc函数
3 \# z+ W2 W) b: f" Mint fputc(int ch, FILE *f)
' h. B) q! a. ]4 |8 G4 f; _  t{         
. ]+ h; t6 N! Q        while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕   1 ~& h& S7 z% z4 k
        LPUART1->TDR=(uint8_t)ch;      
3 ?8 Y, s7 J% T( P+ J3 L        return ch;3 a! @! f, x  n8 E- {  F
}
4 L! ^5 |# O- w% t/ G#endif 3 N2 B3 b, u, g. T0 I: J; R
1 u( A) Q1 G; t. s" n* N
2)
/ m) H( T/ e# g' v. b2 C$ b  添加测试代码
  f% S" @: r. D4 h- e; u  Dled任务  
" m& ^# j, @4 w* V  E* Cvoid StartDefaultTask(void const * argument)
+ D* F' }3 F- D2 k. Y{5 b# d+ @* {% W& ~  ]* x0 w
  for(;;)
: T8 r7 m0 F6 Q  {
  q, [- U1 R' h, K8 W+ V. L3 C  [    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);+ l% W; d6 ]# q; ^9 w$ j* F, f; q
    osDelay(500);5 }2 o$ O; O3 e# e
  }
6 J% C# _) r. D# r}
. M+ E3 s8 Y$ ~$ q% ^: ?% y7 j/ b! g- e- |( d" r7 [, D4 K3 e8 R. e
printf 代码
7 W+ q( a+ }& [2 e9 G/* StartTask03 function */) R( O$ f( V( ~! }
void StartTask03(void const * argument)
  U$ w# a- U' n7 M/ L9 w. V{
0 D5 V8 I8 F! B3 S8 p$ _/ B  /* USER CODE BEGIN StartTask03 */9 L  S# c* o! @1 y
  /* Infinite loop */4 A1 ~) P& Q! f5 s: t4 n6 j
  for(;;)9 z% W0 g$ @' f- K/ Q  n% p
  {
$ y6 x) I4 {, j) p% C    printf("基于 Nucleo-L496ZG FreeRTOS 培训测试  \r\n");. g9 C; u% x3 x4 J$ j6 H
    osDelay(1000);+ ~8 ?) y/ B- y- u( C7 T+ ]
  }
5 U7 V" {1 u: Y* d  /* USER CODE END StartTask03 */
7 c) }' w3 x, U5 i7 p/ q}# n  j+ b1 u9 z8 e

" p5 F+ Y" W9 |6 |5 结果如下
+ F: R0 ?2 B& z8 n% R) ~1 @3 U3 S) y- Y/ J* `

. N% W+ o8 c  b1 ~8 }2 ]8 @, Y7 t3 y6 X! N: z1 O* A

$ x7 q) p+ O6 V  m7 E! g8 ]1 S  l2 |2 j# w: m& R5 M$ e

$ b. t% K; G# \! @8 ~+ m9 {, n  A; P* ^$ ^  i
  N6 G* Q% p2 T5 w! I. l; x
3 w" \, t, w$ B6 l2 z, {5 u8 H
. B* w7 S7 y" q/ u: Z+ r  n& D
收藏 评论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月技术原创
9 R# U" H6 d7 H% ghttps://www.stmcu.org.cn/module/forum/thread-615497-1-1.html

所属标签

相似分享

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