OpenEdv-开源电子网

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

求助!!!STM32F103串口实验

[复制链接]

4

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-7-16
在线时间
5 小时
发表于 2022-2-28 10:33:39 | 显示全部楼层 |阅读模式
1金钱
我根据b站上的视频,将串口通信实验的usart.c里面的部分代码写到了main函数里面。程序编译没有问题,连程序逻辑都是和原子哥给的例程一模一样。但是就是在最后实际运行时,利用串口调试软件没办法达到理想的运行结果。我很疑惑,淦!
我的代码如下:图一是main.c,图二是usart.c

我的main代码

我的main代码
                     

我的usart代码

我的usart代码

原子哥代码如下:图一是main.c,图二是usart.c

原子哥main代码

原子哥main代码
        

原子哥usart代码

原子哥usart代码

我的程序运行结果如下:

实际运行结果

实际运行结果

理想运行结果,也就是原子哥代码的运行结果如下:

理想结果

理想结果


麻烦各位大佬可以斧正我的荒谬错误吗?恳求点拨,谢谢!!!

最佳答案

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

兄弟!!!问题找到了!!! main.c中代码第67、68行的那个if应该放到62行else函数里面去! 如果放在外面的话,USART_RX_STA的值就恒大于(USART_REC_LEN-1)了! 那么USART_RX_STA就会被重新赋值为0,主函数就进不到第一个if里去!!! 太激动了,用了很多惊叹号,别介意哈!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-7-16
在线时间
5 小时
 楼主| 发表于 2022-3-1 08:56:29 | 显示全部楼层
LcwSwust 发表于 2022-2-28 15:43
我的意思是监测它的值,看单片机是不是收到一字节它就加一.

兄弟!!!找到问题在哪里了!!!
main.c里面!!!
第67、68行的if应该放在第62行的else里面去!!!
不然USART_RX_STA的值会一直大于(USART_REC_LEN-1)!
USART_RX_STA的值会被一直赋零!!!
主函数中就进不到第85行的if里面去!!!
太激动了,用了很多惊叹号,别介意!
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-7-16
在线时间
5 小时
 楼主| 发表于 2022-2-28 10:33:40 | 显示全部楼层
LcwSwust 发表于 2022-2-28 15:43
我的意思是监测它的值,看单片机是不是收到一字节它就加一.

兄弟!!!问题找到了!!!
main.c中代码第67、68行的那个if应该放到62行else函数里面去!
如果放在外面的话,USART_RX_STA的值就恒大于(USART_REC_LEN-1)了!
那么USART_RX_STA就会被重新赋值为0,主函数就进不到第一个if里去!!!
太激动了,用了很多惊叹号,别介意哈!!!
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-2-28 10:56:50 | 显示全部楼层
好像没有看出什么不同
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8465
金钱
8465
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-2-28 10:57:26 | 显示全部楼层
本帖最后由 LcwSwust 于 2022-2-28 10:58 编辑

理想结果是啥?当前结果有啥问题?
定时发送"请输入数据..."时把usart_rx_sta发出来看看
还有就是串口助手是有可能有BUG的,换最新版本或另外找个助手试试.
专治疑难杂症
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-2-28 11:17:29 | 显示全部楼层
可以用2.7版本的调试助手试试

串口调试助手(XCOM).rar

1.52 MB, 下载次数: 16

回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-7-16
在线时间
5 小时
 楼主| 发表于 2022-2-28 11:41:26 | 显示全部楼层
本帖最后由 MONE 于 2022-2-28 11:42 编辑
LcwSwust 发表于 2022-2-28 10:57
理想结果是啥?当前结果有啥问题?
定时发送"请输入数据..."时把usart_rx_sta发出来看看
还有就是串口助手 ...

理想结果就是,例如,我发送了“stm32f103”过去后,会收到“您所发送的内容是:stm32f103”这样的信息。很显然我没收到,发送过去后一直没给我返回来。串口助手应该没问题,是2.6版本。
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-7-16
在线时间
5 小时
 楼主| 发表于 2022-2-28 11:43:24 | 显示全部楼层
ChenRyan 发表于 2022-2-28 10:56
好像没有看出什么不同

我也没,弄了好久了。。。
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8465
金钱
8465
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-2-28 12:08:14 | 显示全部楼层
本帖最后由 LcwSwust 于 2022-2-28 12:09 编辑
MONE 发表于 2022-2-28 11:41
理想结果就是,例如,我发送了“stm32f103”过去后,会收到“您所发送的内容是:stm32f103”这样的信息。 ...

1.串口中断里将LED取反,助手发送一字节看是否进入了中断,没进中断的话检查RXD脚是否连通.
2.将USART_RX_STA发出来看看.
专治疑难杂症
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-7-16
在线时间
5 小时
 楼主| 发表于 2022-2-28 14:33:28 | 显示全部楼层
LcwSwust 发表于 2022-2-28 12:08
1.串口中断里将LED取反,助手发送一字节看是否进入了中断,没进中断的话检查RXD脚是否连通.
2.将USART_RX_ ...

USART_RX_STA就是一个定义的全局十六位变量,在我发出来的usart.c里面定义的
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8465
金钱
8465
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-2-28 15:43:38 | 显示全部楼层
MONE 发表于 2022-2-28 14:33
USART_RX_STA就是一个定义的全局十六位变量,在我发出来的usart.c里面定义的

我的意思是监测它的值,看单片机是不是收到一字节它就加一.
专治疑难杂症
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-7-16
在线时间
5 小时
 楼主| 发表于 2022-2-28 15:48:55 | 显示全部楼层
LcwSwust 发表于 2022-2-28 15:43
我的意思是监测它的值,看单片机是不是收到一字节它就加一.

哦哦,好的好的,我待会儿去试一试,谢谢哈
回复

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-9-6
在线时间
8 小时
发表于 2022-4-22 15:11:05 | 显示全部楼层
我的是一点反应都没
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 11:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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