完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
int main() { u16 i=0; my_systeminit(); //系统时钟初始化 delay_init(72); LED_Init(); Key_Init(); USART1_Init(); IWDG_Init(); Send_String("测试开始"); while(1) { i++; Send_String("循环计数:"); Send_Char(i/10+0x30);Send_Char(i%10+0x30); Send_Enter(); delay_ms(100); // IWDG_ReloadCounter();//喂狗 } } 以上是我的主程序的代码.在串口调试的时候 发现在while前的 Send_String("测试开始"); 发送出的数据是乱码 而while里面的发送会正常显示. 当在while前的 Send_String("测试开始"); 测试开始前加一个空格即Send_String(" 测试开始"); 则显示正常. 不知是和原因. 串行口具体配置如下: void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG; GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启外设USART1时钟 USART_InitStructure.USART_BaudRate = 9600; //设定数据波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//传输数据长度 USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位个数 USART_InitStructure.USART_Parity = USART_Parity_No;//不用检验位 USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None; //不用流控制 USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//使能接收和发送 // USART_InitStructure.USART_Clock = USART_Clock_Disable; // USART_InitStructure.USART_CPOL = USART_CPOL_High; // USART_InitStructure.USART_CPHA = USART_CPHA_1Edge; // USART_InitStructure.USART_LastBit = USART_LastBit_Enable; USART_Init(USART1, &USART_InitStructure);//初始化串口1 USART_Cmd(USART1, ENABLE); //使能串口1 } 发送字符串的函数如下: void Send_Char(u8 Data) { USART_SendData(USART1, Data); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成 } void Send_Enter(void) { Send_Char(0x0d); Send_Char(0x0a); } void Send_String(u8 *s) {//发送字符串 while(*s!=' |