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!='\0')
{
Send_Char(*s);
s++;
}
Send_Enter();
}
麻烦论坛的各位STM32的各位专家学者以及爱好者帮忙解决一下这个问题.
(不知到是什么原因,我贴不上图和添加不了附件.可能问题述说的也不够详细,还请各位多费心理解.如我表述上不清楚的,您请直接提问我会第一时间把问题补充的更加完整.谢谢)
|