打印

GD32F150G8 USART1 REA接收状态无法使能

[复制链接]
1688|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
void rs422_uart_init(uint32_t baudrate, uint16_t data_bits,uint16_t parity, uint16_t stopbits)
{

        rcu_periph_clock_enable(AS32_GPIO_RX_RCC);
        rcu_periph_clock_enable(AS32_GPIO_TX_RCC);
       
        rcu_periph_clock_enable(AS32_UART_RCC);

        /* connect port to USARTx_Tx */
    gpio_af_set(AS32_GPIO_TX_PORT, AS32_UART_AF, AS32_GPIO_TX_PIN);

    /* connect port to USARTx_Rx */
    gpio_af_set(AS32_GPIO_RX_PORT, AS32_UART_AF, AS32_GPIO_RX_PIN);
   
    /* configure USART Tx as alternate function push-pull */
    gpio_mode_set(AS32_GPIO_TX_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, AS32_GPIO_TX_PIN);
    gpio_output_options_set(AS32_GPIO_TX_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, AS32_GPIO_TX_PIN);

    /* configure USART Rx as alternate function push-pull */
    gpio_mode_set(AS32_GPIO_RX_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, AS32_GPIO_RX_PIN);
    gpio_output_options_set(AS32_GPIO_RX_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, AS32_GPIO_RX_PIN);
       
        usart_deinit(AS32_UART);
    usart_baudrate_set(AS32_UART, baudrate);
    usart_transmit_config(AS32_UART, USART_TRANSMIT_ENABLE);
    usart_receive_config(AS32_UART, USART_RECEIVE_ENABLE);
   
        nvic_irq_enable(AS32_UART_IRQ, 1, 1);
       
#ifdef AS32_DIR_PORT
        rcu_periph_clock_enable(AS32_DIR_RCC);
        gpio_output_options_set(AS32_DIR_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, AS32_DIR_PIN);
        gpio_mode_set(AS32_DIR_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, AS32_DIR_PIN);
        gpio_bit_reset(AS32_DIR_PORT, AS32_DIR_PIN);       
#endif
        usart_interrupt_flag_clear(RS485_UART,USART_INT_FLAG_RBNE_ORERR);
        usart_interrupt_enable(AS32_UART,USART_INT_RBNE);

        usart_enable(AS32_UART);
        usart_transmit_config(AS32_UART, USART_TRANSMIT_ENABLE);
    usart_receive_config(AS32_UART, USART_RECEIVE_ENABLE);
}
ST-link 调试, 寄存器STAT REA位,没法变换为1 , 也就是 接收核心部分没有工作,
同样的代码 使用USART0 就可以, 这是为什么?

使用特权

评论回复
沙发
faithswss|  楼主 | 2021-3-4 15:43 | 只看该作者

CTL0 的TEN REN UEN 都为1, 但是 STAT 的 REA为0, TEA为1 ,并且后面运行过程中一致为0.
是哪里设置错误吗?

使用特权

评论回复
板凳
faithswss|  楼主 | 2021-3-4 15:45 | 只看该作者
#define AS32_UART                        USART1
#define AS32_UART_IRQ                USART1_IRQn
#define AS32_UART_RCC                RCU_USART1
#define AS32_UART_AF                GPIO_AF_1

#define AS32_GPIO_TX_RCC        RCU_GPIOA
#define AS32_GPIO_TX_PORT        GPIOA
#define AS32_GPIO_TX_PIN        GPIO_PIN_2
#define AS32_GPIO_RX_RCC        RCU_GPIOA
#define AS32_GPIO_RX_PORT        GPIOA
#define AS32_GPIO_RX_PIN        GPIO_PIN_3

从逻辑分析仪上能 看到,能够发送出数据, 但无法接收数据

使用特权

评论回复
地板
ccc228| | 2021-5-21 19:51 | 只看该作者
你好,楼主的问题解决了吗?我用GD130也遇到了这个问题

使用特权

评论回复
5
AJSJ| | 2021-5-30 13:12 | 只看该作者
6年前生产的GD32F150C8..,使用USART1 ,需要把 USART_CTL1寄存器STRP置位 .  接线 : TX-TX.   RX-RX .
不知道现在GD32F150是否改正了问题.     

使用特权

评论回复
6
吴工康康| | 2023-9-13 20:14 | 只看该作者
我用 GD32E230F8P6 遇到和你一样的问题了,联系了FAE,还没有答复

使用特权

评论回复
7
jiayuzhang90| | 2024-1-11 10:52 | 只看该作者
吴工康康 发表于 2023-9-13 20:14
我用 GD32E230F8P6 遇到和你一样的问题了,联系了FAE,还没有答复

有答复吗?这边也是同样的问题

使用特权

评论回复
8
Lin@7989| | 2024-1-26 20:40 | 只看该作者
本帖最后由 Lin@7989 于 2024-1-26 20:41 编辑

我用 GD32E230K8U6 也遇到同样问题了,原厂例程 USART1 REA 始终为 0 。

使用特权

评论回复
9
两只袜子| | 2024-1-29 20:57 | 只看该作者
硬件交接或者时钟配置问题

使用特权

评论回复
10
两只袜子| | 2024-1-29 20:58 | 只看该作者
此外还有中断和寄存器配置看看有无问题

使用特权

评论回复
11
吴工康康| | 2024-4-17 10:55 | 只看该作者
jiayuzhang90 发表于 2024-1-11 10:52
有答复吗?这边也是同样的问题

不要判断这个标志位, 直接用

使用特权

评论回复
12
shenxiaolin| | 2024-4-30 16:03 | 只看该作者
是不是没有引脚功能重映射?

使用特权

评论回复
13
kzlzqi| | 2024-7-31 22:01 | 只看该作者
在你的 rs422_uart_init 函数中配置 RS-422 (或 RS-485) 的 UART,发现寄存器 STAT REA 位无法变为 1,这表明接收部分没有正常工作。相同的代码在 USART0 上可以正常工作,说明问题可能与 AS32_UART 相关。

使用特权

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

本版积分规则

2

主题

5

帖子

2

粉丝