本帖最后由 smarhoney 于 2021-1-12 11:40 编辑
硬件平台: GD32F103RCT6
软件平台:Keil uVision5 5.27.1.0
串口测试软件:SSCOM V5.13.1
我在GD32F103RCT6开发板上运行串口输出程序正常
但是当我把程序下载到也是基于GD32F103RCT6的产品时却出现如下乱码
一般来说,出现乱码是因为波特率设置问题。然而,我不论程序中还是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;
}
|