最近學習到串口發送數據時遇到一個問題:第一個字節總是FE,后面才是對的數據。
最終解決的方法是:
講GPIO復用的操作放到GPIO配置之前!
體現在代碼中就是:
1 //打開GPIO時鍾 2 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); 3 //打開USART的時鍾 4 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); 5 6 //GPIOA的Pin9和Pin10復用為串口1使用 7 GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); 8 GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); 9 10 //配置USART_TX為推挽復用 11 GPIO_InitStruct.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN; 12 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; 13 GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; 14 GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; 15 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; 16 GPIO_Init(DEBUG_USART_TX_GPIO_PORT,&GPIO_InitStruct); 17 18 //配置USART_RX為浮空輸入 19 GPIO_InitStruct.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN; 20 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; 21 GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; 22 GPIO_Init(DEBUG_USART_RX_GPIO_PORT,&GPIO_InitStruct);