| 
 
| 各位好! 在使用STM32F105串口时收到乱码,抓到的时序与计算的不对,下面是配置:
 我用的外部晶振是12MHz,时钟配置:
 
 /* RCC system reset(for debug purpose) */
 RCC_DeInit();
 
 /* Enable HSE */
 RCC_HSEConfig(RCC_HSE_ON);
 
 /* Wait till HSE is ready */
 HSEStartUpStatus = RCC_WaitForHSEStartUp();
 
 if(HSEStartUpStatus == SUCCESS)
 {
 /* Enable Prefetch Buffer */
 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
 
 /* Flash 2 wait state */
 FLASH_SetLatency(FLASH_Latency_2);
 
 /* HCLK = SYSCLK */
 RCC_HCLKConfig(RCC_SYSCLK_Div1);
 
 /* PCLK2 = HCLK */
 RCC_PCLK2Config(RCC_HCLK_Div1);
 
 /* PCLK1 = HCLK/2 */
 RCC_PCLK1Config(RCC_HCLK_Div2);
 
 /* PLLCLK = 12MHz * 6 = 72 MHz */
 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);
 
 /* Enable PLL */
 RCC_PLLCmd(ENABLE);
 
 /* Wait till PLL is ready */
 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
 {
 }
 
 /* Select PLL as system clock source */
 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
 
 /* Wait till PLL is used as system clock source */
 while(RCC_GetSYSCLKSource() != 0x08)
 {
 }
 }
 
 /* Enable USART1, GPIOA, GPIOx and AFIO clocks */
 RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOx
 | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);
 /* Enable USART2 clock */
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
 
 配置串口:
 USART_InitStructure.USART_BaudRate = 19200;
 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_Rx | USART_Mode_Tx;
 USART_Init(USART2, &USART_InitStructure);
 USART_Cmd(USART2, ENABLE);
 
 但是用单片机发送数据,抓到的时序,1BIT为34.75us,同时PC端波特率设置为19200,收到的也是不对应的数据。
 在USART1和USART2都试过了,都是一样的。改动波特率设置,得到的结果也会相应改变,比如改为9600,则抓到的时间段为69.5us。请问是神马原因呢?
 谢谢!
 | 
 |