问答

汇集网友智慧,解决技术难题

无名人123

TA的家园币:20  

  • GD32F103串口问题

    串口初始化时,校验位为偶校验,数据位8时,单片机发出来的数据是乱码,后来问了一下芯片厂家,他们说设置校验位的时候数据位要设置成9,但是发出来的数据还是部分是乱码。重点来了:我设置无校验,数据位8时,跟上位机通信,无论串口组手有没有校验位(奇偶或者无校验)都能通信成功,且数据正常,这谁能给解释一下原因。串口相关代码如下:voidCIOControl::USART_Config(void){rcu_periph_clock_enable(RCU_USART2);gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_10);gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_11);/*USARTconfigure*/usart_deinit(USART2);usart_baudrate_set(USART2,2400);usart_word_length_set(USART2,USART_WL_8BIT);usart_stop_bit_set(USART2,USART_STB_1BIT);usart_parity_config(USART2,USART_PM_NONE);usart_hardware_flow_rts_config(USART2,USART_RTS_DISABLE);usart_hardware_flow_cts_config(USART2,USART_CTS_DISABLE);usart_receive_config(USART2,USART_RECEIVE_ENABLE);usart_transmit_config(USART2,USART_TRANSMIT_ENABLE);usart_enable(USART2);usart_interrupt_enable(USART2,USART_INT_RBNE);nvic_irq_enable(USART2_IRQn,1,0);}INT8UCUART::SendData(INT8U*DataBuf,INT16UDataLen){INT8Uj;for(INT16Ui=0;i<DataLen;i++){usart_data_transmit(m_UARTNum,DataBuf);Delay_ms(1);for(j=0;j<200;j++){if(usart_flag_get(m_UARTNum,USART_FLAG_TC)!=RESET){usart_flag_clear(m_UARTNum,USART_FLAG_TC);break;}Delay_us(100);}if(j==200)//20ms没有发送成功,则认为发送失败{returnFALSE;}}returnTRUE;}