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

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

[复制链接]
寂寞,点燃一支烟 发布时间:2018-4-15 11:21
1.工程新建,楼主比较懒,习惯用STM32cubeMX生成代码,新建过程中选Nucleo-L496ZG板子的工程,为了减少配置,我直接将不用的MCU管教关闭了,
7 a+ G7 y( h% D* G    具体打开的外设有 LPUART1 ,LED_Blue,LED_Red,系统时钟用内部时钟。调试选择 Serial Write。(后续要用JTAG它调试 )1 _2 k+ T  \5 w3 j6 e" h
, R" h8 d( x+ z4 x: d3 C3 d. w: A8 E
( R2 l3 @+ N0 }6 E

6 j) U8 I& _& d2. 配置FreeRTOS,和外设 关于L496ZG串口波特率配置为9600以上,具体原因看帖子
/ G+ v4 e1 x7 a1 N; b) D    https://www.stmcu.org.cn/document/detail/index/id-218816?lat
9 f9 l6 X  t% G- I6 v   led和串口的配置我就不放图了,可以参考别人的帖子,
2 T6 n+ t  ]  I  Y3.  FreeRTOS 简单配置。生成IAR工程5 {5 x" U) P. u' h; x
4.在串口文件中  添加printf重定义文件 ,类型就是原子哥的方法- X- h1 X+ ]& W1 Z  ^- q
1)% U1 b: t8 t/ u& K3 a
#if 1; Y% |0 ^  ^# v( e: _, f2 I% c
#pragma import(__use_no_semihosting)             - P( K; J" ]+ n+ }. T
//标准库需要的支持函数                 : d1 W; [  l/ C# U2 j. \0 B! y
struct __FILE 4 k" Z" t7 j4 `' o! @6 N
{ 5 L% D2 ~. N6 h. \- f1 y7 F2 U" L4 s: {
        int handle; 3 F; ~7 H3 _0 O& c
}; 6 l7 n# B' Z* l7 R$ D& O
FILE __stdout;       + @, M9 d4 V9 m. E9 J
//定义_sys_exit()以避免使用半主机模式   
7 ]; Z1 _* v9 }% k" Pvoid _sys_exit(int x) 3 Q% t, @# L" v3 X9 X, P- Z
{ ' S" v7 {  D! W6 u, C4 @6 O
        x = x; 8 I. [0 [2 T% P/ ?
}
6 _, r# F1 M3 Y. C//重定义fputc函数 3 f+ p+ t6 r% P+ S
int fputc(int ch, FILE *f)" D& J" b! J8 v1 y6 P7 x2 o
{         0 z+ N3 i; A( _% g# I2 H# i( U
        while((LPUART1->ISR&0X40)==0);//循环发送,直到发送完毕   # O" b4 ?6 K$ ]* I$ A
        LPUART1->TDR=(uint8_t)ch;      
9 c7 r+ A# P3 C. q& l- ]        return ch;$ g# z8 u2 f( {) K. y- E+ P& I8 r$ I
}* N9 d: ?5 c4 P
#endif
* ~4 L: T& C) B" G2 _
+ c- s$ x( Q% C1 w2)* [) w% _0 ^5 U8 m. T/ Y
  添加测试代码
% N6 U; X/ o  {4 E5 E) e: ?8 I$ c' Oled任务  
$ g/ p# x: }7 m( Z& Nvoid StartDefaultTask(void const * argument)
! }- V8 V# b4 a7 l4 ]{: }  B4 d  K0 y: m& n4 u
  for(;;)
: v8 b7 c, s  g5 M: y' b* F  {
% N) f2 J6 K% Y0 v0 d; n    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);% F. C9 Q2 }8 x
    osDelay(500);
4 v) Z' I3 X) R2 a9 b  }  x0 |( v' J" ^& z# Y& u0 p2 E
}  c. ?6 h# S) s/ ?0 Y( P8 v
# @* p* z" Y5 F) `: h+ A3 R
printf 代码
& r8 v5 `$ v9 }4 D2 ^2 S( D; L/* StartTask03 function */' F' r% ?1 A5 W1 m5 h% e, Q9 n
void StartTask03(void const * argument)
% S6 \: \2 M  E- y{
: x# h* T4 v, Y& i# x# e8 Z; l  /* USER CODE BEGIN StartTask03 */" {- W- E( M2 N
  /* Infinite loop */
  O4 v! m5 ~/ N) q) k; a  for(;;)0 L0 v9 `. Y2 e/ a: {
  {
, x4 y' P6 Q+ m( w* j) t    printf("基于 Nucleo-L496ZG FreeRTOS 培训测试  \r\n");
% U: G& R: t" r3 _    osDelay(1000);9 Z- Y* K. `+ P1 x: Y
  }3 K! ]8 W* V6 A3 t/ K  {& V
  /* USER CODE END StartTask03 */
- x; G: u2 Y7 X' F6 D' \& ?}
) O2 i/ Y0 T$ C' W% U% z1 W6 u; Y
5 结果如下$ O1 P1 h/ O% I! r/ N) s/ k
9 Q4 t8 P$ b/ i' ^0 D

& z" {/ v' K0 Z1 ]2 J' l& y) w7 z# s. X0 X! f+ A& e$ F
! i( S4 H) K" G- L( G0 }8 N: d/ a
3 b! t: C' J5 x  c, o9 h: H' N

% l" }4 z0 Q  u( f' |% c1 u. G# F7 l4 a9 k0 x

' B7 \: t6 m' r/ }9 }: M" L% c
1 @* z: p+ ~; i! m
  Y" W. H; e; Q% k: D* |3 _" l
赞 收藏 评论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月技术原创" P& V( J" C* g1 s9 \5 \
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版