关于GD32F450ZG系列板卡对RS232发送数据前后不匹配

        先说一下问题,在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
  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值