先说一下问题,在Keil 5开发环境下对板卡上的RS232串口进行配置,要求发送0x5A一笔数据,但实际在串口调试助手中收到0xEC 0xF3 两笔数据,前后发送的数据不匹配。
针对这个问题,对一下几点重新检查,并确保无误:
1、检查引脚使能情况;
2、检查串口配置信息;
3、检查串口调试助手的软件设置信息;
4、分析数据;
1、检查引脚使能情况:
以我当前项目为例,根据硬件提供的板卡原理图,确定RS232串口需要配置的GPIO引脚
根据串口端口部分原理图找到TX和RX两点,然后根据TX和RX找到对应串口芯片的位置
根据上面的图可知,在串口芯片中连接GD32芯片上的引脚为TXD0和RXD0,由此可以确定当前GD32对于RS232使能的GPIO引脚位置,分别对应的是PA9(TXD0)和PA10(RXD0)
根据此PA9和PA10两引脚,我们在GD32F450数据手册中查找其复用情况:PA9对应USART0_TX,PA10对应USART0_RX,并且复用功能对应AF7。
这里我们对于GPIO的引脚信息了解的差不多了,然后我们看源码。
void GPIO_RS232_Init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
/*TX*/
gpio_af_set(GPIOA,GPIO_AF_7,GPIO_PIN_9);
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_9);
gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_9);
/*RX*/
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_10);
gpio_af_set(GPIOA,GPIO_AF_7,GPIO_PIN_10);
gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_10);
}
由上面信息以及源码的比对,发现在引脚使能这一块未发现任何问题,大家可以自行对照一下。无误后继续检查下面的步骤进行问题排除。
2、检查串口配置信息:
根据我们以往的串口配置经验,115200-8-N-1这个口诀都老生常谈了,我们按照这个再进行问题排除。
void BSP_RS232_Init(void)
{
rcu_periph_clock_enable(RCU_USART0);
/*默认初始化串口*/
usart_deinit(USART0);
/*波特率9600*/
usart_baudrate_set(USART0,9600);
/*无奇偶校验*/
usart_parity_config(USART0,USART_PM_NONE);
/*8位数据*/
usart_word_length_set(USART0,USART_WL_8BIT);
/*1位停止位*/
usart_stop_bit_set(USART0,USART_STB_1BIT);
/*使能发送与接收功能*/
usart_transmit_config(USART0,USART_TRANSMIT_ENABLE);
usart
标签:set,引脚,GD32F450ZG,GPIOA,串口,发送数据,GPIO,RS232,USART0
From: https://blog.csdn.net/weixin_63007052/article/details/141669454