OpenEdv-开源电子网

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

如何获取串口的发送和接收的标志位?

[复制链接]

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2015-9-27 14:47:45 | 显示全部楼层 |阅读模式
5金钱
我用C#写了一个小的串口调试软件,并在51的板子上调试成功了,但是换到STM32F103上不行了,由于刚学STM32,还很不熟悉,所以还请各位能否告诉我如何获取串口的发送和接收的标志位。或是帮我把下面的代码用STM32重构一遍,不胜感激,我真的不想做伸手党。我可以公开我的调试软件代码。
这是上位机的界面,水平有限。。。。


51上的代码:
[mw_shl_code=c,true]void Send(uint8_t a, uint16_t c) { uint8_t b[4]; uint8_t i=0; b[0] = a; b[1] = c>>8; b[2] = c&0xff; b[3] = ~a; ES = 0;//关串口中断 for(i=0; i<4; i++) { SBUF = b; while(!TI); TI = 0; } }[/mw_shl_code]
[mw_shl_code=c,true]void Review(void) { uint16_t i; uint8_t a[3] = {0xff,0xff,0xff}; if(RI) { a[0] = SBUF; RI = 0; i = 0; while(i < 2000) { i++; if(RI) { a[1] = SBUF; RI = 0; i = 0; while(i < 2000) { i++; if(RI) { a[2] = SBUF; RI = 0; i = 2000; } } } } } if(a[0]==0x00 && a[1]==0x01 && a[2]==0xff) Send(0x00,(Date += 10)); else if(a[0]==0x00 && a[1]==0x02 && a[2]==0xff) Send(0x00,(Date -= 10)); }[/mw_shl_code]


最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=c,true]void USART1_IRQHandler(void) { static uint8_t i = 0; static uint8_t buf[3] = {0xff, 0xff, 0xff}; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { buf = USART_ReceiveData(USART1);       USART_ClearITPendingBit(USART1,USART_IT_RXNE); i++; } }[/mw_shl_code] 这是接收,但是上位机发送要是太快,上位机会因为内存越界而停 ...
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
 楼主| 发表于 2015-9-27 14:47:46 | 显示全部楼层
[mw_shl_code=c,true]void USART1_IRQHandler(void) { static uint8_t i = 0; static uint8_t buf[3] = {0xff, 0xff, 0xff}; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { buf = USART_ReceiveData(USART1);       USART_ClearITPendingBit(USART1,USART_IT_RXNE); i++; } }[/mw_shl_code]
这是接收,但是上位机发送要是太快,上位机会因为内存越界而停止运行。
可能是本人的水平有限,上位机做得太差了。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
 楼主| 发表于 2015-9-27 15:45:15 | 显示全部楼层
[mw_shl_code=c,true]void Send_PC(uint8_t header, uint16_t date) { uint8_t buf[4]; buf[0] = header; buf[1] = date >> 8; buf[2] = date & 0xff; buf[3] = 0xff; for(uint8_t i=0; i<4; i++) { while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); USART_SendData(USART1, buf); } }[/mw_shl_code]
发送已解决,接收怎么办呢?
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-28 22:34:10 | 显示全部楼层
帮顶....
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
 楼主| 发表于 2015-9-29 15:55:30 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥.......
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2015-9-29 16:02:11 | 显示全部楼层
原子的原版程序http://www.openedv.com/posts/list/11742.htm
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
 楼主| 发表于 2015-9-29 16:40:25 | 显示全部楼层
回复【6楼】止天:
---------------------------------
谢谢
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 07:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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