OpenEdv-开源电子网

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

串口发送单个字符的问题,有什么细节问题啊

[复制链接]

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
发表于 2021-7-25 13:15:04 | 显示全部楼层 |阅读模式
1金钱
不知道为什么重复发送单个字符会没有数据!!!单个单个的发送又正常!
发送单个字符正常使用的


/*
问题:
info = 'A';
while(1)
{
         Send_data(info);        //这段代码会发现发送的全是空白
}
但是
info = 'A';
while(1)
{
        Send_data(info);        //这段代码又是正常的???不知道为什么
        info = info + 1;
}

*/


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

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2021-7-25 13:25:48 | 显示全部楼层
info = 'A';
while(1)
{
         Send_data(info);        //这段代码会发现发送的全是空白
}

这个代码复位一次后又会发送正常了。。。。
理解不了原理
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-7-25 19:35:08 | 显示全部楼层
看你的Send_data()
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-7-25 20:08:34 | 显示全部楼层
一般PC的串口接收代码,都会选择用空闲时间来触发串口接收数据事件的, 就是说没接收到串口数据多久才会发生串口接收数据事件, 你这么一直发就是不给这个空闲时间发生。
试一试, 做个计数器, 连续发一段时间就停几十毫秒
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2021-7-25 21:08:12 | 显示全部楼层
edmund1234 发表于 2021-7-25 20:08
一般PC的串口接收代码,都会选择用空闲时间来触发串口接收数据事件的, 就是说没接收到串口数据多久才会发 ...

谢谢
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2021-7-25 21:09:12 | 显示全部楼层
edmund1234 发表于 2021-7-25 20:08
一般PC的串口接收代码,都会选择用空闲时间来触发串口接收数据事件的, 就是说没接收到串口数据多久才会发 ...

问题是我一直发,复位之后又正常这个理解不了
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2021-7-25 21:10:54 | 显示全部楼层
c2007s 发表于 2021-7-25 19:35
看你的Send_data()

void Send_data(char data)
{
        while(!(USART1->SR & 0x40));                //等待TC位发送完成
        USART1->DR = data;                                                //DR写操作,准备完成后会自动修改tc位
}
回复

使用道具 举报

4

主题

912

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4518
金钱
4518
注册时间
2019-9-4
在线时间
915 小时
发表于 2021-7-26 10:06:38 | 显示全部楼层
好像我之前也这样写过是正常的,你while里面发送数据后延时10ms试下正不正常?
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-7-26 17:55:35 | 显示全部楼层
bbq 发表于 2021-7-25 21:09
问题是我一直发,复位之后又正常这个理解不了

复位期间还能发串口数据不? 如果不能发, 这不就等你在数据间加了个延迟么?
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2021-7-26 22:11:45 | 显示全部楼层
edmund1234 发表于 2021-7-26 17:55
复位期间还能发串口数据不? 如果不能发, 这不就等你在数据间加了个延迟么?

复位期间不行。程序下载进去串口接收的全是空白,偶尔几次能够接收几个正常的数据。但是只要重新上电或复位就恢复正常,太神奇了
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2021-9-3 23:13:58 | 显示全部楼层
c2007s 发表于 2021-7-25 19:35
看你的Send_data()

没有send_data,我只用cubemx里面自带得函数
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-1 02:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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