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

干货 Nucleo072 usart 基于RTOS的应用 方便AT指令类外设开发  

[复制链接]
lovewyufeng 发布时间:2015-1-8 14:06
本代码 基于楼主上一贴发表 帖子构建的工程:https://www.stmcu.org.cn/module/forum/thread-598980-1-1.html

[url=CUBEMX  简单创建 FREERTOS 和RTX 工程,顺便讨论一处代码 https://www.stmcu.org.cn/module/foru ... 980&fromuid=1888292 (出处: 意法半导体STM32/STM8技术社区)]CUBEMX  简单创建 FREERTOS 和RTX 工程,顺便讨论一处代码 https://www.stmcu.org.cn/module/foru ... 980&fromuid=1888292 (出处: 意法半导体STM32/STM8技术社区)[/url]

添加了一个 os_usart.c的 文件  
内容

如下


  1. #include "stm32f0xx_hal.h"
  2. #include "cmsis_os.h"
  3. #include "stdio.h"

  4. extern UART_HandleTypeDef huart2;
  5. osSemaphoreId usart_sem;
  6. #define Buffersize 10
  7. struct usart_buf_t
  8. {
  9. char buffer[Buffersize];
  10. int rx_index;
  11. int save_index;

  12. }usart_buf;
  13. void os_usart_init()
  14. {
  15. usart_sem =osSemaphoreCreate(0,1);
  16. usart_buf.rx_index=0;
  17. usart_buf.save_index=0;
  18. osSemaphoreWait(usart_sem,osWaitForever);
  19.         
  20.         HAL_NVIC_SetPriority(USART2_IRQn, 0, 1);
  21.         HAL_NVIC_EnableIRQ(USART2_IRQn);
  22.         __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
  23. }

  24. void USART2_IRQHandler()
  25. {
  26. if((__HAL_UART_GET_IT(&huart2, UART_IT_RXNE) != RESET) && (__HAL_UART_GET_IT_SOURCE(&huart2, UART_IT_RXNE) != RESET))
  27.   {

  28.                 usart_buf.buffer[usart_buf.rx_index++]=huart2.Instance->RDR;
  29.                 if(usart_buf.rx_index==Buffersize)usart_buf.rx_index=0;
  30.                 if(usart_buf.rx_index==usart_buf.save_index)
  31.                 {
  32.                         usart_buf.save_index++;
  33.                         if(usart_buf.save_index==Buffersize)usart_buf.save_index=0;
  34.                 }
  35.                 osSemaphoreRelease(usart_sem);
  36.     /* Clear RXNE interrupt flag */
  37.     __HAL_UART_SEND_REQ(&huart2, UART_RXDATA_FLUSH_REQUEST);
  38.   }
  39. }
  40. static unsigned int usart_timeout=osWaitForever;
  41. void Set_usart_timeout(int timeout)
  42. {
  43. usart_timeout=timeout;
  44. }

  45. int fgetc(FILE*f)
  46. {
  47. int ch;
  48.         if(usart_buf.rx_index!=usart_buf.save_index)
  49.         {
  50.                 ch=usart_buf.buffer[usart_buf.save_index++];
  51.                 if(usart_buf.save_index==Buffersize)
  52.                 {
  53.                 usart_buf.save_index=0;
  54.                 }
  55.                 return ch;
  56.         }
  57.         else
  58.         {
  59.         if(osSemaphoreWait(usart_sem,usart_timeout)==osOK)
  60.         {
  61.         return fgetc(f);
  62.         }
  63.         else
  64.         {
  65.         return 0;
  66.         }
  67.         }
  68. }

  69. int fputc(int ch,FILE*f)
  70. {
  71.         while(!(huart2.Instance->ISR&UART_FLAG_TXE));
  72.         huart2.Instance->TDR=ch;
  73. }
复制代码

复制代码

下面是主函数  增加内容  

作用为  通过scanf 扫描串口 数据到 i

将收到数据  以0x-- 16进制 打印

使用 超级终端  运行程序  键盘输入 10 Enter  可见超级中端  输出0xa


QQ截图20150108135246.jpg


scanf阻塞  程序运行的过程中 仍然看见  072 LED闪烁

如此可见 使用OS  接收串口比 没有OS的优势~~

例如 用这种方式操作 GSM模块  printf("AT+XX");
发送  AT指令之后  

用scanf  接收模块回复

在此过程中  你的设备仍然可以通过其他线程 响应  按键或者  更新屏幕 显示~~

FREERTOS.zip

下载

4.76 MB, 下载次数: 316

工程文件 请打开freertos的 工程

收藏 3 评论28 发布时间:2015-1-8 14:06

举报

28个回答
沐紫 回答时间:2015-1-8 14:12:57
楼主把上个帖子标题和网址也贴出来吧,这样能连贯看下来啦
liuqihui-347226 回答时间:2015-1-8 14:13:06
支持一下,做过类似的东西,确实,这样搞会方便很多
lovewyufeng 回答时间:2015-1-8 14:14:25
沐紫 发表于 2015-1-8 14:12
楼主把上个帖子标题和网址也贴出来吧,这样能连贯看下来啦

上一贴的 地址在 帖子 顶端呀
KuMo_2011 回答时间:2015-1-8 14:17:14
不明觉厉,MARK
lovewyufeng 回答时间:2015-1-8 14:19:28
贴的 代码  注释又没了  ,,,收敲酸了  明天重新编辑  注释吧
oipk 回答时间:2015-1-8 14:59:45
不明觉厉,MARK,楼主牛掰啊。看来我要动cube了
boyubeiyu 回答时间:2015-1-8 15:01:52
不错。学习下
qwe775208732 回答时间:2015-1-8 15:06:47
不懂,学习,哈哈
晓枫VS枯叶 回答时间:2015-1-8 15:36:34
楼主的接收中断为什么不直接调用HAL的API写,还要搞寄存器!
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

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