打印
[STM32F0]

发出的数据不对

[复制链接]
640|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
spark周|  楼主 | 2019-12-15 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用stm32f030c8串口1 通信 发出的数据不对,我用的是内部晶振  

使用特权

评论回复
沙发
liliang9554| | 2019-12-15 15:34 | 只看该作者
什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
板凳
spark周|  楼主 | 2019-12-15 15:38 | 只看该作者
之前也是用串口1在A口是通信正常,由于第二版把串口1挪到B口 通信就不正常了,串口能发出

使用特权

评论回复
地板
午夜粪车| | 2019-12-15 15:42 | 只看该作者


然后呢?你是怎么应对这个的呢

使用特权

评论回复
5
spark周|  楼主 | 2019-12-15 15:46 | 只看该作者
比我我发送0X55,结果发出的是 0x77,0x74,而且不稳定。有大侠给指点迷津,不胜感激!

使用特权

评论回复
6
zhaoxqi| | 2019-12-15 15:48 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
7
spark周|  楼主 | 2019-12-15 15:51 | 只看该作者

串口设置如下
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)
  {
  }
}

使用特权

评论回复
8
huangchui| | 2019-12-15 15:56 | 只看该作者

USART1->BRR = 205;  // 波特率单独计算
把这句去掉看看

使用特权

评论回复
9
jiajs| | 2019-12-15 15:59 | 只看该作者
用库函数,让系统自己配置看看

使用特权

评论回复
10
jiajs| | 2019-12-15 16:01 | 只看该作者
用库函数,让系统自己配置看看

使用特权

评论回复
11
zhanghqi| | 2019-12-15 16:04 | 只看该作者

或者再焊块板子测试下;

使用特权

评论回复
12
spark周|  楼主 | 2019-12-15 16:07 | 只看该作者

这句我是不成功才加的
加了也不行 忘记注释掉了.谢谢你的回复 ,遇到这种问题我不知道该从哪里入手  

使用特权

评论回复
13
zhenykun| | 2019-12-15 16:10 | 只看该作者
然后呢?你是怎么应对这个的呢

使用特权

评论回复
14
spark周|  楼主 | 2019-12-15 16:14 | 只看该作者

我把
USART1->BRR = 205;  // 波特率单独计算,这行注释掉,程序我发送0X55  发出正确 ,发送0X46发出的是0XAE

使用特权

评论回复
15
wyjie| | 2019-12-15 16:17 | 只看该作者
什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
16
spark周|  楼主 | 2019-12-15 16:19 | 只看该作者
通过跟踪 串口时钟为48MHZ ,如截图所示

使用特权

评论回复
17
jlyuan| | 2019-12-15 16:23 | 只看该作者
没有理由啊,会不会是焊接出现问题了

使用特权

评论回复
18
spark周|  楼主 | 2019-12-15 16:26 | 只看该作者
焊接没问题,两块板子都是如此

使用特权

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

使用特权

评论回复
20
shimx| | 2019-12-15 16:33 | 只看该作者
同求,内部时钟稳定否

使用特权

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

本版积分规则

821

主题

10121

帖子

4

粉丝