打印
[STM32F1]

波特率的问题

[复制链接]
945|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Cjy_JDxy|  楼主 | 2017-11-27 15:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用STM32F107VCT6写串口程序。波特率设为9600.
可是用示波器看,一位300多微妙,时间不对。
是不是要设置时钟啊。请问怎么设置才能让波特率对的上啊?谢谢!
我外部晶振8M
沙发
Cjy_JDxy|  楼主 | 2017-11-27 16:01 | 只看该作者
我加了这一段程序:
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。

使用特权

评论回复
板凳
Cjy_JDxy|  楼主 | 2017-11-27 16:05 | 只看该作者
初始化程序:
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);//Í£Ö¹¸´Î»       

        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);
}

使用特权

评论回复
地板
huangcunxiake| | 2017-11-27 18:53 | 只看该作者
根据手册给的公式计算。

使用特权

评论回复
5
huangcunxiake| | 2017-11-28 15:16 | 只看该作者
难道那边接收不到数据?

使用特权

评论回复
6
Cjy_JDxy|  楼主 | 2017-11-28 15:45 | 只看该作者
huangcunxiake 发表于 2017-11-28 15:16
难道那边接收不到数据?

可以收到,数据不对。
要修改STM32F10X.H里的一个外部时钟频率值。
原来是25000000,改成8000000就好了。

使用特权

评论回复
7
gujiamao12345| | 2017-11-28 15:56 | 只看该作者
设置波特率的时候 根据系统时钟配,即先获取时钟,在计算寄存器值,这样的好处:改变系统时钟,无需重新计算寄存器

使用特权

评论回复
8
huangcunxiake| | 2017-11-28 16:11 | 只看该作者
Cjy_JDxy 发表于 2017-11-28 15:45
可以收到,数据不对。
要修改STM32F10X.H里的一个外部时钟频率值。
原来是25000000,改成8000000就好了。 ...

原来对应的晶振应该是25Mhz的配置,改的对。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3520

帖子

19

粉丝