2144|2

1万

帖子

16

TA的资源

版主

楼主
 

【NUCLEO-L452RE测评】+串口收到的数值给消息队例 [复制链接]

接着上一程序,上一程序是这样,有两个任务一个发消息给消息队列,一个收消息队列并打印,同时串口接收中断。

那么这次我想再增加个消息队列,再增加个任务收串口来的消息,串口收到8个数据后传给消息队列。

 

由于CMSIS_RTOS是对FREERTOS的封装,其有些函数都变了。优其消息队列的处理我觉得就很不一样。但我觉得CMSIS_RTOS简单,将来有钱途。所以就仍然用CMSIS_RTOS.

至于两者有何区别请看下边的文章:

en.DM00105262(1).pdf (731.26 KB, 下载次数: 2)

 

至于这次为什么增加一个队列,一个任务,我这么想地,操作系统之所以用它是给我解决问题地,那么我现在就是要三个任务一个中断,两个消息队列地跑。跑不起就说明不是个好系统。

 

在串口中断完成回调函数里加入如下语句:

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	uint8_t i;
	HAL_UART_Transmit(&huart2, uart2_rxbuf, 1, 100);    // 把收到的字节原样发送出去
	for(i=0;i<8;i++)
	{
	osMessagePut(myQueue02Handle,uart2_rxbuf[i],osWaitForever);
	}
	HAL_UART_Receive_IT(&huart2, uart2_rxbuf, 1);       // 重新注册一次,要不然下次收不到了
}

在新增任务里加入如下语句:

void StartTask04(void const * argument)
{
  /* USER CODE BEGIN StartTask04 */
	osEvent evt;
	uint8_t queue_buffer[10];
  uint8_t queue_count;
	
	/* Infinite loop */
  for(;;)
  {
    evt = osMessageGet(myQueue02Handle,osWaitForever);
		if(queue_count < 8)
		{
	       queue_buffer[queue_count] = evt.value.v;
         ++queue_count;
        if(queue_count == 8)
        {
					printf("the message is trainslate...");
				}					
		}
		
		
		osDelay(1);
  }
  /* USER CODE END StartTask04 */
}

 

 

断点打到printf那一行的前面。运行检查发送和接收的,正确!

我发的就是这个:01 03 00 01 00 02 00 11

 

此帖出自stm32/stm8论坛

最新回复

谢谢大佬分享,期待后续!   详情 回复 发表于 2020-12-29 22:36
点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复
举报

1万

帖子

2853

TA的资源

管理员

沙发
 

ST NUCLEO-L452RE测评

汇总贴:https://bbs.eeworld.com.cn/thread-1151850-1-1.html 

此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 

回复

7504

帖子

2

TA的资源

五彩晶圆(高级)

板凳
 

谢谢大佬分享,期待后续!

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表