|
如题,测试STM32F407的串口的时候发送的数据一直是代码,感觉是时钟不对,但是我自己延时感觉还好啊。
板子用的是8M的晶振,倍频到72M,下面是我的串口代码及时钟设置
在线等,求大牛啊~~~
RCC时钟设置
- void InitialSysClock(void)
- {
- uint32_t PLL_M;
- uint32_t PLL_N;
- uint32_t PLL_P;
- uint32_t PLL_Q;
-
- RCC_DeInit(); /*配置前将所有RCC重置为初始值*/
- RCC_HSEConfig(RCC_HSE_ON); /*等待外部晶振进入稳定状态*/
- while( RCC_WaitForHSEStartUp() != SUCCESS );
- //PLL,PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N ,SYSCLK = PLL_VCO / PLL_P
- PLL_M = 8;
- PLL_N = 288; //must between 192 and 432 MHz.
- PLL_P = 4;//This parameter must be a number in the range {2, 4, 6, or 8}. SYSCLK=HSE/PLL_M
- PLL_Q = 6;
- RCC_PLLConfig(RCC_PLLSource_HSE, PLL_M, PLL_N, PLL_P, PLL_Q);
- RCC_PLLCmd(ENABLE);
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
-
- RCC_HCLKConfig(RCC_HCLK_Div1); //HCLK=SYSLCK=72MHZ
- RCC_PCLK1Config(RCC_HCLK_Div2); //APB1时钟配置. 2分频,即 PCLK1 = 36 MHz*/ 高速APB1最大允许42MHZ
- RCC_PCLK2Config(RCC_HCLK_Div1); //APB2时钟配置. 1分频,即 PCLK2 = 72 MHz*/ 高速APB2最大允许84MHZ
- BSP_NVIC_Init();
- }
复制代码
下面是串口相关
- void InitUsart1(void)
- {
- USART1_GPIO_Init(); //初始化端口
- USART1_Configuration(); //串口初始化
- USART1_NVIC_Init(); //NVIC初始化
-
- SendData1(0XAA);
- SendData1('A');
- //printf("\r\n this is a printf demo \r\n");
- }
- void USART1_Configuration(void) //串口初始化函数
- {
- USART_InitTypeDef USART_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
-
- USART_InitStructure.USART_BaudRate = 9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
-
- USART_Init(USART1, &USART_InitStructure); /* Configure USART1 basic and asynchronous paramters */
- USART_Cmd(USART1, ENABLE);
- //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//TXE接收中断,TC传输完成中断,RXNE接收中
- USART_Cmd(USART1, ENABLE); //启动串口
- }
- void USART1_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);;//开端口A时钟
- GPIO_StructInit(&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- /* Configure USART1 Rx (PA.10) as input floating */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(GPIOA, &GPIO_InitStructure); //RX初始化
-
-
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
- }
- void USART1_NVIC_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=4;//先占优先级0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- void SendData1(unsigned char i)
- {
- USART1->DR=i;
- while((USART1->SR&0X40)==0);//等待发送结束
- }
复制代码
|
|