UARTブートローダと非常に奇妙な現象に遭遇したいくつかのコードを書きました。
簡単な紹介は、最初の統一の構成IOポートMCUで、その後、シリアルポートのパラメータを設定して、周期的に送信される「0」と「\ rを」:コードは次のとおりです。進は0x30から0x0Dのです
メインINT(ボイド) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); RCC_HSE_Configuration(); //初期化する外部の高速クロック SysTick_Init(); IO_Init(); //ポートボード初期化 Uart_Init(115200)を; //シリアルポートを初期化し つつ(1)/ *無限*ループ/ { UART_SendByte( '0'); UART_SendByte( '\のR&LT'); 遅延(1000); } } ボイドIO_Init(ボイド) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA、ENABLE);
//構成USART1テキサス州(PA。 09)機能ピンとプルモードとして GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP。 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz。 USART_InitStructure.USART_Parity = USART_Parity_No。 ()GPIOA、&GPIO_InitStructure とGPIO_Init。 GPIO_ResetBits(GPIO、GPIO_Pin_9)。 //配置USART1送信(PA.10)功能引脚并作为是浮き空输入模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10。 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING。 GPIO_Init(GPIO、&GPIO_InitStructure)。 } (ボーのuint32_t)ボイドUart_Init { USART_InitTypeDef USART_InitStructure。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1、ENABLE)。 USART_InitStructure.USART_BaudRate =ボー。 USART_InitStructure.USART_WordLength = USART_WordLength_8b。 USART_InitStructure.USART_StopBits = USART_StopBits_1。 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None。 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1、&USART_InitStructure)。 // USART_ClearFlag(USART1、USART_FLAG_TC)。 USART_Cmd(USART1、ENABLE)。 }
結果は、プログラム、操作がテストする時間がかかり、非常に奇妙な感じ、0x3fを0x30から0x0Dの前に正常であり後に送られた最初のバイトをダウンロードしています。
、シリアルポート設定機能で次の2つのシリアルポート設定:1を試してみてください
(ボーのuint32_t)Uart_Initボイド { ; USART_InitTypeDef USART_InitStructure GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1、ENABLE); //構成USART1送信(PA.09)関数ピンプルモードとして GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; (GPIOAと、&GPIO_InitStructure)GPIO_Init; //構成USART1送信(PA.10)機能端子とフローティング入力モードとして GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIOAとGPIO_Init(、 GPIO_InitStructure&); USART_InitStructure.USART_BaudRate =ボー。 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(USART1、&USART_InitStructure)。 // USART_ClearFlag(USART1、USART_FLAG_TC)。 USART_Cmd(USART1、ENABLE)。 }
これは、彼らは0x30から0x0Dのを受け、電力正常です
2試してみてください:この変更を、シリアルクロックは、内周ポート設定機能で開かれます。
IO_Initの空隙(ボイド) { GPIO_InitTypeDef GPIO_InitStructure; |; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA RCC_APB2Periph_GPIOB、ENABLE) (RCC_APB2Periph_USART1 ENABLE)RCC_APB2PeriphClockCmd; //ポートを開くクロックが進んでいる場合、周辺 //構成USART1送信(PA.09)機能端子およびAS出力モードを引く ; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;(GPIOA、&GPIO_InitStructure有する)GPIO_Init ;(GPIOA、GPIO_Pin_9有する)GPIO_ResetBits 機能の端子として//構成USART1送信(PA.10)、及びフローティング入力モード GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; (GPIOAと、&GPIO_InitStructure)GPIO_Init。 }
また、通常の出力0x30から0x0Dを
概要:STM32のペリフェラルクロックは追加ポートの設定の前に開くように設定する必要があります。