打印
[STM32F0]

stm32f030c8 串口通信波特率不对困惑求解惑

[复制链接]
4328|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llb560|  楼主 | 2015-11-10 10:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 llb560 于 2015-11-10 10:29 编辑

我用stm32f030c8串口1 通信 发出的数据不对,我用的是内部晶振  
之前也是用串口1在A口是通信正常,由于第二版把串口1挪到B口 通信就不正常了,串口能发出 ,比我我发送0X55,结果发出的是 0x77,0x74,而且不稳定。有大侠给指点迷津,不胜感激!
串口设置如下
static void UART_Config(void)
{
        // UART1 ->485
        GPIO_InitTypeDef  GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef        NVIC_InitStructure;

        // UART1 485
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
   
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE );
        //RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
   // RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
        
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_0);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_0);  
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;                 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);  
  // RCC_USARTCLKConfig( RCC_USART1CLK_PCLK );
  //  USART_DeInit( USART1 );
        
    // 波特率 115200  8 data,  1 stop,  N   
        USART_InitStructure.USART_BaudRate = 19200;
        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(RS485_UART, &USART_InitStructure);

        USART1->BRR = 205;  // 波特率单独计算
        USART_Cmd(RS485_UART, ENABLE);
        USART_ITConfig(RS485_UART,USART_IT_RXNE,ENABLE);

        
        
}
系统时钟设置如下
static void SetSysClock(void)
{
  /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/

  /* At this stage the HSI is already enabled */

  /* Enable Prefetch Buffer and set Flash Latency */
  FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

  /* HCLK = SYSCLK */
  RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

  /* PCLK = HCLK */
  RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

  /* PLL configuration = (HSI/2) * 12 = ~48 MHz */
  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL));
  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_DIV2 | RCC_CFGR_PLLMUL12);

  /* Enable PLL */
  RCC->CR |= RCC_CR_PLLON;

  /* Wait till PLL is ready */
  while((RCC->CR & RCC_CR_PLLRDY) == 0)
  {
  }

  /* Select PLL as system clock source */
  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

  /* Wait till PLL is used as system clock source */
  while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
  {
  }
}




沙发
llb560|  楼主 | 2015-11-10 10:29 | 只看该作者
顶起来

使用特权

评论回复
板凳
mmuuss586| | 2015-11-10 12:32 | 只看该作者
USART1->BRR = 205;  // 波特率单独计算
把这句去掉看看,用库函数,让系统自己配置看看;

或者再焊块板子测试下;

使用特权

评论回复
地板
llb560|  楼主 | 2015-11-10 13:21 | 只看该作者
这句我是不成功才加的
加了也不行 忘记注释掉了.谢谢你的回复 ,遇到这种问题我不知道该从哪里入手  

使用特权

评论回复
5
llb560|  楼主 | 2015-11-10 13:43 | 只看该作者
我把
USART1->BRR = 205;  // 波特率单独计算,这行注释掉,程序我发送0X55  发出正确 ,发送0X46发出的是0XAE

使用特权

评论回复
6
llb560|  楼主 | 2015-11-10 16:02 | 只看该作者
通过跟踪 串口时钟为48MHZ ,如截图所示

使用特权

评论回复
7
lefeng| | 2015-11-10 19:57 | 只看该作者
之前也是用串口1在A口是通信正常,由于第二版把串口1挪到B口 通信就不正常了

没有理由啊,会不会是焊接出现问题了

使用特权

评论回复
8
llb560|  楼主 | 2015-11-10 21:15 | 只看该作者
焊接没问题,两块板子都是如此

使用特权

评论回复
9
llb560|  楼主 | 2015-11-11 14:53 | 只看该作者
本帖最后由 llb560 于 2015-11-11 14:55 编辑

谢谢两位朋友的回复,问题解决了,很低级的错误,485正负接反了  调过来就好了。USART1 输出接485输出 结果485接线和上一版电路不一样,硬件工程师调换了下,

使用特权

评论回复
10
feitian916| | 2015-12-15 11:15 | 只看该作者
问下楼主,刚开始用这款新品,使用内部的晶振,波特率115200,有没有误差这个问题?

使用特权

评论回复
11
it_yrj| | 2015-12-20 09:32 | 只看该作者
feitian916 发表于 2015-12-15 11:15
问下楼主,刚开始用这款新品,使用内部的晶振,波特率115200,有没有误差这个问题? ...

同求,内部时钟稳定否

使用特权

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

本版积分规则

1

主题

17

帖子

0

粉丝