完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
单片机:stm32f103vet6
平台:野火STM32开发板 问题描述:串口在初始化(还未发送任何数据)的时候,PC端会接收到一个字节的乱码 状态:未解决 我调试串口的步骤一般是先初始化UART,然后printf重定向,最后在串口助手里面打印出一些数字。调试还算顺利,成功打印出一行数据。但是每次复位的时候,第一个字符之前都有会多出一个乱码,起初以为是TC置1的问题,改了好几遍都没有效果,后来想一想,TC置1的问题是发送的第一个字符丢失,现在的问题是,第一个字符不丢失,而是第一个字符前出现一个乱码。 串口助手设置十六进制显示,发现在最开始的时候会打印一个字符0xFE。 单步调试发现在串口初始化前的GPIO初始化USART1的TXD——PA9的时候,出现0x00,全速运行时发送0xFE,后来想到,会不会是GPIO在复位的时候出现一个低电平脉冲被PC识别成一个字符。但是发现GPIO在复位后默认是模拟输入状态,ODR寄存器复位后为0,于是用GPIO_SetBits函数将PA9先拉高,再初始化PA9为GPIO_Mode_AF_PP,问题仍然存在。 问题仍然存在,待解决。 附代码: #include "stm32f10x_gpio.h" #include "stm32f10x_usart.h" #include "stm32f10x_rcc.h" #include void LED_portConfig(void) { GPIO_InitTypeDef temp; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); temp.GPIO_Mode = GPIO_Mode_Out_PP; temp.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; temp.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&temp); } void uart_init(unsigned long baud) { USART_InitTypeDef temp; GPIO_InitTypeDef gpio_initStruct; /*gpio config*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_SetBits(GPIOA,GPIO_Pin_9); //À¸ßPA9 gpio_initStruct.GPIO_Mode = GPIO_Mode_AF_PP; gpio_initStruct.GPIO_Pin = GPIO_Pin_9; gpio_initStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&gpio_initStruct); //ÂÒÂë·¢ËÍλÖà gpio_initStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; gpio_initStruct.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOA,&gpio_initStruct); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); USART_StructInit(&temp); temp.USART_BaudRate = baud; USART_Init(USART1,&temp); USART_ClearFlag(USART1,USART_FLAG_TC); USART_ClearFlag(USART1,USART_FLAG_TXE); USART_Cmd(USART1,ENABLE); } int fputc(int ch, FILE *f) { USART_SendData(USART1,(unsigned char) ch); while((USART1->SR & USART_FLAG_TC) == 0); return ch; } void uart_sendstring(char *str) { while(*str) { USART_SendData(USART1,*str++); while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET); } } void delay(unsigned long t) { unsigned long i,j; for(i=0; i for(j=0; j<1000; j++); } int main(void) { unsigned int k=0x12345678; LED_portConfig(); uart_init(115200); //出现乱码的位置 printf("Hello worldnr"); printf("k = 0x%04xnr",k); while(1) { printf("k = 0x%04xr",k++); GPIO_SetBits(GPIOC,GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); delay(500); GPIO_ResetBits(GPIOC,GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); delay(500); } } |
|
|
|
只有小组成员才能发言,加入小组>>
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
382 浏览 1 评论
250 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
230 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
590 浏览 2 评论
615 浏览 2 评论
1345浏览 9评论
STM32F429 U盘IAP升级程序跳转APP异常的原因?
14浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
12浏览 3评论
STM32F103时钟硬件程序会卡在“while((SPI3->SR SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);”导致异常复位的原因?
68浏览 3评论
10浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 03:55 , Processed in 0.688142 second(s), Total 70, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号