GD32F103RCT6串口输出乱码

[复制链接]
886|3
手机看帖
扫描二维码
随时随地手机跟帖
smarhoney|  楼主 | 2021-1-12 11:28 | 显示全部楼层 |阅读模式
本帖最后由 smarhoney 于 2021-1-12 11:40 编辑

硬件平台: GD32F103RCT6
软件平台:Keil uVision5 5.27.1.0
串口测试软件:SSCOM V5.13.1

我在GD32F103RCT6开发板上运行串口输出程序正常
correct.png

但是当我把程序下载到也是基于GD32F103RCT6的产品时却出现如下乱码
error.png

一般来说,出现乱码是因为波特率设置问题。然而,我不论程序中还是SSCOM对波特率设置都是115200,即使改成其他波特率也是乱码,只是乱的形式不同。
我感觉不是软件问题,但是硬件方面又不知道该从哪里入手。
不知道各位前辈有什么建议?
感谢,感谢!
main.c文件如下:

#pragma import(__use_no_semihosting)  

void systick_config(void);
void uart_init(uint32_t bound);
void delay_1ms(uint32_t count);



int a,b,c;
long long i;

char s[256];

int main(void)

{
        
/* 配置系统时钟 */
        //systick_config();   //这里如果不注释掉,

        
        /* 初始化USART0 */
        uart_init(115200);
        
        printf("123456789ABCDEFGHIJKLMNOPQRStUVWXYZ\n");
        printf("begin ...\n");
        printf("hello world\n");
        a=0;b=0;c=0;
        while(1)
        {
                sprintf(s,"Hello world! %d, %d, %d\n",a,b,c);
                printf(s);
                a++;
                b++;
                c=a+b;
               
                if(a>256)a=0;
                if(b>256)b=0;
               
                for(i=0;i<5000000;i++){}
                                       
    }
        
}



volatile static uint32_t delay;


void systick_config(void)
{
    /* setup systick timer for 1000Hz interrupts */
    if (SysTick_Config(SystemCoreClock / 1000U)){
        /* capture error */
        while (1){
        }
    }
    /* configure the systick handler priority */
    NVIC_SetPriority(SysTick_IRQn, 0x00U);
}


/* USART0串口初始化函数
* 参数:波特率
* 返回值:无        */
void uart_init(uint32_t bound)
{        
        
                rcu_periph_clock_enable(RCU_AF);
        /* 使能 GPIOA 时钟 */
    rcu_periph_clock_enable(RCU_GPIOA);

    /* 使能 USART0 时钟 */
    rcu_periph_clock_enable(RCU_USART0);

    /* PA9  复用为 USART0_Tx */
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);

    /* PA10 复用为 USART0_Rx */
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ,GPIO_PIN_10);
                                       
    /* USART0 初始化配置 */
    usart_deinit(USART0);
    usart_baudrate_set(USART0, bound);                                                /* 设置波特率 */
        
          usart_word_length_set(USART0, USART_WL_8BIT);
    usart_stop_bit_set(USART0, USART_STB_1BIT);
    usart_parity_config(USART0, USART_PM_NONE);
    usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
    usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);
        
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);        /* 接收 */
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);        /* 发送 */        
                usart_enable(USART0);
}


/* 加入以下代码,支持printf函数,而不需要选择use MicroLIB        */  


/* 标准库需要的支持函数 */               
struct __FILE
{
        int handle;

};

FILE __stdout;      
/* 定义_sys_exit()以避免使用半主机模式  */  
void _sys_exit(int x)
{
        x = x;
}
/* 重定义fputc函数 */
int fputc(int ch, FILE *f)
{   
        while (RESET == usart_flag_get(USART0, USART_FLAG_TBE));        
        usart_data_transmit(USART0, (uint8_t)ch);

        return ch;
}


使用特权

评论回复
xyz549040622| | 2021-1-12 11:58 | 显示全部楼层
你两者的晶振都是一样的吗,感觉能够影响的就只有晶振了。

使用特权

评论回复
LcwSwust| | 2021-1-12 13:11 | 显示全部楼层
示波器监测串口脚波形,可看出波特率及数据是否正确。

使用特权

评论回复
zeshoufx| | 2021-1-12 17:17 | 显示全部楼层
请搜索《关于解决gd32f103 串口乱码的 办法 》这个贴,,,这个我已经提过好多次了,,论坛里就有,,,外部时钟不分频,,pll倍频系数要小于16

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝