1416|7

16

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD,FE置位,NE没有置位 [复制链接]

本帖最后由 CC2503 于 2024-4-9 10:36 编辑

求助:STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD:LIN断开标志,RXNE读数据寄存器非空,IDLE监测到总线空闲,FE帧错误以上均被硬件置位,NE没有置位,接收到的数据一直为0,找不到原因了。

使用的USART1 RX PA0浮空输入,TX PA9复用推挽输出 速度10M,系统时钟16M 波特率111111,串口收发使用的CH341 12M,整个系统只是使用了串口收发一个功能。

以下为DEBUG:

初始化后USART1各寄存器状态

收到收据后SR寄存器状态

发送数据后SR寄存器状态

USART1部分代码如下:

void USART1_Conf(void)
{
    USART1->CR1    &=    ~USART_CR1_M;//一个起始位,8个数据位,n个停止位
    
    USART1->CR2    &=    ~USART_CR2_STOP;//设置1个停止位
    
    USART1->BRR    &=    ~USART_BRR_DIV_Mantissa;//整数部分清0
    USART1->BRR    |=    (9<<4);//设置整数部分 9 整数加小数部分为9.0000
    USART1->BRR    &=    ~USART_BRR_DIV_Fraction;//小数部分清0
    
    USART1->CR1    |=    USART_CR1_UE;//USART1使能
    USART1->CR1    |=    USART_CR1_RE;//使能接收
    USART1->CR1    &=    ~USART_CR1_RWU;//接收器处于正常工作模式
}

int main(void)
{
    unsigned long u;
    
    RCC_Conf();
    GPIO_Conf();
    USART1_Conf();
    while(1)
    {
        while(!(USART1->SR    &    USART_SR_RXNE));//等待收到数据可以读出
        u=USART1->DR;
        
        USART1->CR1    |=    USART_CR1_TE;//使能发送
        while(!(USART1->SR    &    USART_SR_TC));//等待发送完成
        
        while(!(USART1->SR    &    USART_SR_TXE));//等待发送数据寄存器空
        
        USART1->DR    =u;//数据写进DR发送寄存器中
        while(!(USART1->SR    &    USART_SR_TC));//等待发送完成
        
        while(!(USART1->SR    &    USART_SR_TXE));//等待发送数据寄存器空
        USART1->CR1    &=    ~USART_CR1_TE;//关闭发送
    }    

此帖出自stm32/stm8论坛

最新回复

如果有逻辑分析仪或者示波器,能接一下信号看一下,板子外发的数据波形大概就能看出来来里串口的相关配置,然后在看一下你的输入波形,看看有没有异常。   详情 回复 发表于 2024-5-22 11:50
点赞 关注
 

回复
举报

16

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

没事用LIN为什么会检测到断开呢,还FE置位NE没有置位那表示没有发生帧错误而是接受到断开符,我用CH341的TX和RX短接,串口助手收发都正常,没问题,难道是我硬件有问题?


此帖出自stm32/stm8论坛
 
 

回复

6559

帖子

10

TA的资源

版主

板凳
 

波特率111111,你的串口助手可以设置这个值吗?  

此帖出自stm32/stm8论坛

点评

可以设置,使用SSCOM,可以自定义设置波特率,我也用波特率9600试过,也是上面这种情况  详情 回复 发表于 2024-4-9 11:24
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

4
 
秦天qintian0303 发表于 2024-4-9 11:21 波特率111111,你的串口助手可以设置这个值吗?  

可以设置,使用SSCOM,可以自定义设置波特率,我也用波特率9600试过,也是上面这种情况

此帖出自stm32/stm8论坛
 
 
 

回复

714

帖子

2

TA的资源

一粒金砂(高级)

5
 

首先短接你板子的rx,tx看自发自收有没有问题,如果正常,多半硬件没有问题,很可能就是时钟时序什么有问题;在正常连接,不停的切换上位机工具波特率,看看数值有变化,有变化的话,很可能就是配置的时钟这些有问题了,如果有逻辑分析仪或者示波器,能接一下信号看一下,板子外发的数据波形大概就能看出来来里串口的相关配置,然后在看一下你的输入波形,看看有没有异常。然后你这个测试轮询不太确定有没有问题,可以直接参考库里的轮询接口修改后者直接调用相关接口试试

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

回复

6

帖子

1

TA的资源

一粒金砂(中级)

6
 
试试在串口初始化的时候就把各种标志位先清零。
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

7
 

如果有逻辑分析仪或者示波器,能接一下信号看一下,板子外发的数据波形大概就能看出来来里串口的相关配置,然后在看一下你的输入波形,看看有没有异常。

此帖出自stm32/stm8论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

8
 

问题解决了,想起帖子的时间太久了,串口收的一个标志放在循环体的外面导致的

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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