打印
[AT32F435]

USART 可以发送数据,无法接收

[复制链接]
236|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
斯文|  楼主 | 2024-11-13 15:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
按手册的配置好引脚后,USART1 后来又换了USART3  使用上位机通信,MCU只能发送数据,没办法接收数据。。实在不知道什么问题了

使用特权

评论回复
沙发
muyichuan2012| | 2024-11-13 18:44 | 只看该作者
代码没有修改完吧   贴一下代码大家给你看看

使用特权

评论回复
板凳
zchong| | 2024-11-13 21:09 | 只看该作者
找例程先研究明白再改呗

使用特权

评论回复
评论
斯文 2024-11-14 07:59 回复TA
多谢了 我GPIO配置错了 接收引脚应该配置成复用模式, 为配置成接收模式了。 
地板
斯文|  楼主 | 2024-11-13 23:06 | 只看该作者
老哥们 这是 GPIO  跟 USAART3的初始化代码,请老哥们帮忙分析

260886734bc753b552.png (24.8 KB )

260886734bc753b552.png

8176734bfec10f6e.png (67.71 KB )

8176734bfec10f6e.png

724656734c05c868ae.png (15.54 KB )

724656734c05c868ae.png

使用特权

评论回复
5
full_stack| | 2024-11-14 00:42 | 只看该作者
实际测量了接收管脚的波形了吗?某些管脚可能是JTAG模式,类似STM32的GPIO_PinRemapConfig()这个函数。

使用特权

评论回复
6
丙丁先生| | 2024-11-14 07:30 | 只看该作者
是不是上拉电阻?

使用特权

评论回复
7
丙丁先生| | 2024-11-14 07:34 | 只看该作者
以下是一个完整的示例代码片段,展示了如何配置USART3并启用接收功能:

        
c
复制代码
#include "usart.h"
#include "gpio.h"
#include "interrupt.h"

int main(void) {
    // USART3 初始化
    ustart(USART3, CRM_USART3_PERIPH_CLOCK, TRUE);
    gpio_init(GPIOB, &GPIOInitStruct); // 假设USART3的TX和RX分别连接到GPIOB的某些引脚
    gpio_pin_mux_config(GPIOB, GPIO_PIN_SOURCE11, GPIO_MUX_7);
    gpio_pin_mux_config(GPIOB, GPIO_PIN_SOURCE10, GPIO_MUX_7);
   
    // USART3 参数配置
    usart_parameter_struct usart3initstruct;
    usart3initstruct.usart_baudrate = 9600;
    usart3initstruct.usart_mode = USART_MODE_Rx | USART_MODE_Tx;
    usart3initstruct.usart_wordlength = USART_WLEN_8BITS;
    usart3initstruct.usart_stopbits = USART_STOPBITS_1;
    usart3initstruct.usart_parity = USART_PARITY_NO;
    usart3initstruct.usart_hardwareflow = USART_HARDWAREFLOWTH_NONE;
   
    usart_init(USART3, &usart3initstruct);
   
    // 使能USART3
    usart_enable(USART3, ENABLE);
   
    // 使能USART3接收中断
    uart_interrupt_receive_enable(USART3, ENABLE);
    uart_interrupt_receive_flag_clear(USART3, RESET);
    mvic_irq_enable(USART3_IRQn);
    mpri_config(USART3_IRQn, PRIGROUP_PRIO3, 0);
   
    // 主循环
    while (1) {
        // 显示固定文本
        LCD_ShowString(0, 0, "Loc:", 0xffff, 0x0000);
        LCD_ShowString(0, 16, "Lat:", 0xffff, 0x0000);
        
        // 检查是否有数据可读
        if (SET == usart_flag_get(USART3, USART_RDBF_FLAG)) {
            uint8_t RxData = usart_data_receive(USART3);
            UsartSendByte(RxData); // 回显接收到的数据
        }
    }
}

   
请根据上述建议逐一排查问题,并确保所有配置都正确无误。如果问题依然存在,可以尝试逐步简化代码,找出具体的问题所在。

使用特权

评论回复
8
xionghaoyun| | 2024-11-14 08:40 | 只看该作者
uart3中断呢?

使用特权

评论回复
9
斯文|  楼主 | 2024-11-14 11:46 | 只看该作者
问题解决了,,是配置USART  rx对应的GPIO的时候, 配置成了输入模式,,实际上应该配置复用模式

使用特权

评论回复
10
mbutterfly| | 2024-11-14 12:30 | 只看该作者
斯文 发表于 2024-11-14 11:46
问题解决了,,是配置USART  rx对应的GPIO的时候, 配置成了输入模式,,实际上应该配置复用模式 ...

解决了就好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝