完善资料让更多小伙伴认识你,还能领取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); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1548 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1493 浏览 1 评论
915 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
656 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1544 浏览 2 评论
1845浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
598浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
499浏览 3评论
501浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
483浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 04:53 , Processed in 0.722058 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号