波特率的问题

2019-03-23 17:11发布

我用STM32F107VCT6写串口程序。波特率设为9600.
可是用示波器看,一位300多微妙,时间不对。
是不是要设置时钟啊。请问怎么设置才能让波特率对的上啊?谢谢!
我外部晶振8M

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
chenbingjy
1楼-- · 2019-03-24 02:40
/ 我加了这一段程序:
void RCC_Configuration()
{
    ErrorStatus HSEStartUpStatus;
        RCC_DeInit();                                                         //????
        RCC_HSEConfig(RCC_HSE_ON);                                            //?????
        HSEStartUpStatus=RCC_WaitForHSEStartUp();
        if(HSEStartUpStatus==SUCCESS)
        {
                FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);             //???????
                FLASH_SetLatency(FLASH_Latency_2);                                //???????
                RCC_HCLKConfig(RCC_SYSCLK_Div1);                                  //??AHB??=????
                RCC_PCLK2Config(RCC_HCLK_Div1);                                   //??APB=HCLK
                RCC_PCLK1Config(RCC_HCLK_Div2);                                   //APB1=HCLK/2
                RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);                              //PLL??????????,????*9   72MHz
                RCC_PLLCmd(ENABLE);                                               //??PLL?????
                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                         //??PLL????????????;
                while(RCC_GetSYSCLKSource()!=0x08);                                //??PLL??????????????   
    }
}
波特率没变。我把波特率改为19200,发现一位的时间是150多us。
chenbingjy
2楼-- · 2019-03-24 08:09
初始化程序:
void UART4_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
            NVIC_InitTypeDef NVIC_InitStructure;        

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
                               
        /* Configure USART2 Tx (PC.10) as alternate function push-pull */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOC, &GPIO_InitStructure);
   
          /* Configure USART2 Rx (PC.11) as input floating */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOC, &GPIO_InitStructure);
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE );
        RCC->APB1RSTR|=1<<19;   //¸′λ′®¿ú4
              RCC->APB1RSTR&=~(1<<19);//í£Ö1¸′λ       

        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_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(UART4, &USART_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;     //UART4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);


        USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
        USART_Cmd(UART4, ENABLE);
}
zh2790
3楼-- · 2019-03-24 12:46
 精彩回答 2  元偷偷看……
chenbingjy
4楼-- · 2019-03-24 18:44
zh2790 发表于 2017-11-28 09:54
系统时钟配置是否正确

搞好了。
要在STM32F10X.h修改一个晶振频率值

一周热门 更多>