OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13858|回复: 7

ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收例程

[复制链接]

3

主题

4

帖子

0

精华

新手入门

积分
36
金钱
36
注册时间
2014-3-10
在线时间
0 小时
发表于 2014-5-27 18:50:54 | 显示全部楼层 |阅读模式

串口发送部分代码:

[mw_shl_code=c,true]//通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) { OS_ERR err; CPU_INT08U isTheFirstCh; OSSemPend(&Usart1Sem, 0, OS_OPT_PEND_BLOCKING, NULL, &err);//阻塞型等待串口发送资源 OSSemPend(&Usart1TxBufSem, 0, OS_OPT_PEND_BLOCKING, NULL, &err);//阻塞型等待发送 isTheFirstCh = 0; if(pTxBufRead == pTxBufWrite){ //若读指针等于写指针,表明要写入缓冲区的为当前第一个数据 isTheFirstCh = 1; //置位第一个数据标志 } *pTxBufWrite = ch;//向当前写指针对应的地址写入数据 if((pTxBufWrite++) == &Usart1TxBuf[USART1_TX_BUFFER_LEN - 1]){ //若当前写指针写到缓冲区最后一个地址,否则地址自增1 pTxBufWrite = Usart1TxBuf; //写指针更新为缓冲区第一个地址,环形队列 } if(isTheFirstCh){ //写入的是第一个数据 USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//开启缓冲区发送空中断,下一步将会进入中断处理数据 } OSSemPost(&Usart1Sem, OS_OPT_POST_1, &err); }[/mw_shl_code]
串口接收部分代码:
[mw_shl_code=c,true]//串口1中断处理程序 void USART1_IRQHandler(void) //串口1中断服务程序 { OS_ERR err; OSIntEnter(); //通知UCOS进入中断 //发送缓冲区空中断 if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) { USART_SendData(USART1, *pTxBufRead);//向串口发送缓冲区写入一个字节 if((pTxBufRead++) == &Usart1TxBuf[USART1_TX_BUFFER_LEN - 1]){ //读到最后一个字节 pTxBufRead = Usart1TxBuf; //移动读指针到第首地址 } if(pTxBufRead == pTxBufWrite){ //若读写指针相等,表明本次缓冲区数据已经读完 USART_ITConfig(USART1, USART_IT_TXE, DISABLE);//关闭中断 } OSSemPost(&Usart1TxBufSem, OS_OPT_POST_1, &err); //释放缓冲区信号量 } //串口接收到数据中断 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ *pRxBufWrite = USART_ReceiveData(USART1); //读取一个字节到缓冲区 OSTaskQPost(&Usart1RxTaskTCB, pRxBufWrite, 1, OS_OPT_POST_FIFO, &err); //发送该字节所在缓冲区的地址到消息队列,等待任务处理 if((pRxBufWrite++) == &Usart1RxBuf[USART1_RX_BUFFER_LEN - 1]){ //若当前写指针写到缓冲区最后一个地址 pRxBufWrite = Usart1RxBuf; //写指针更新为缓冲区第一个地址,环形队列 } } OSIntExit(); //通知UCOS退出中断 }[/mw_shl_code]
例程为ucos-iii的,用mdk4.7创建,测试板为旗舰板,串口发送HEX:5A A5 06 83 60 00 01 00 01可以让LED0亮2S作为测试。有错漏麻烦大家跟帖指正,谢谢。

uCOS-III模板.zip

7.71 MB, 下载次数: 8911

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-7-22
在线时间
0 小时
发表于 2014-5-27 20:29:29 | 显示全部楼层
楼主,最近,我也在学UCOSIII,刚开始,没什么头绪。。可以遇到不会的问下你吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-27 23:03:30 | 显示全部楼层
不错,谢谢分享.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-12-30
在线时间
10 小时
发表于 2016-1-27 19:26:20 | 显示全部楼层
请问 接收数据这段 为什么没有清中断标志的操作
回复 支持 反对

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2016-1-28 00:52:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-12-30
在线时间
10 小时
发表于 2016-1-28 18:38:37 | 显示全部楼层
qq371833846 发表于 2016-1-28 00:52
读DR寄存器也能清了

就是说 读数据的时候其实就已经清中断了?
回复 支持 反对

使用道具 举报

0

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2015-10-9
在线时间
49 小时
发表于 2016-4-1 09:23:47 | 显示全部楼层
so good,这个帖子真棒,学习了!:lol:lol:lol
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2011-8-22
在线时间
14 小时
发表于 2016-10-6 22:14:59 | 显示全部楼层
正在学呢,感谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 11:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表