打印
[STM32G0]

STM32G030CBT6 485级联出现 Over Run error

[复制链接]
643|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近使用STM32G030在做一个传感器的数据采集然后通过RS485传输将数据,单个测试一直没有问题,但是在级联的时候经常会有板子出现进入OVERRUN error 的中断里面,想请问各位大侠,在什么情况下会出现OVERRUN的错误,这种错误应该如何处理和避免呢?而且还有一个问题,就是我已经禁止了ID匹配的功能,但是还是会有ID匹配的终端产生,很是奇怪,具体的初始化代码如下:
请各位大佬帮忙看看,是否有什么地方设置不对的?

void ModBus_USART_Init(BandRatenum Brd )
{
        /* Enable the peripheral clock of GPIO Port */
        LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
        /* Configure Tx Pin as : Alternate function, High Speed, Push pull, Pull up */
        LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_6, LL_GPIO_MODE_ALTERNATE);
        LL_GPIO_SetAFPin_0_7(GPIOB, LL_GPIO_PIN_6, LL_GPIO_AF_0);
        LL_GPIO_SetPinSpeed(GPIOB, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_HIGH);
        LL_GPIO_SetPinOutputType(GPIOB, LL_GPIO_PIN_6, LL_GPIO_OUTPUT_PUSHPULL);
        LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_6, LL_GPIO_PULL_UP);

        /* Configure Rx Pin as : Alternate function, High Speed, Push pull, Pull up */
        LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_7, LL_GPIO_MODE_ALTERNATE);
        LL_GPIO_SetAFPin_0_7(GPIOB, LL_GPIO_PIN_7, LL_GPIO_AF_0);
        LL_GPIO_SetPinSpeed(GPIOB, LL_GPIO_PIN_7, LL_GPIO_SPEED_FREQ_HIGH);
        LL_GPIO_SetPinOutputType(GPIOB, LL_GPIO_PIN_7, LL_GPIO_OUTPUT_PUSHPULL);
        LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_7, LL_GPIO_PULL_UP);
        //--RS485_DE 引脚初始化---
        LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
        LL_GPIO_SetPinMode(GPIOB,LL_GPIO_PIN_4,LL_GPIO_MODE_OUTPUT);
        LL_GPIO_SetPinOutputType(GPIOB,LL_GPIO_PIN_4,LL_GPIO_OUTPUT_PUSHPULL);
        LL_GPIO_SetPinSpeed(GPIOB,LL_GPIO_PIN_4,LL_GPIO_SPEED_FREQ_VERY_HIGH);
        LL_GPIO_SetPinPull(GPIOB,LL_GPIO_PIN_4,LL_GPIO_PULL_NO);
        /*=========================================*/
  /* (2) NVIC Configuration for USART interrupts */
  /*  - Set priority for USARTx_IRQn */
  /*  - Enable USARTx_IRQn */
  NVIC_SetPriority(USART1_IRQn, 1);  
  NVIC_EnableIRQ(USART1_IRQn);
  /* (3) Enable USART peripheral clock and clock source ***********************/
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
  /* Set clock source */
   LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK1);
  /* (4) Configure USART functional parameters ********************************/
  
  /* Disable USART prior modifying configuration registers */
  /* Note: Commented as corresponding to Reset value */
  // LL_USART_Disable(USARTx_INSTANCE);

  /* TX/RX direction */
  LL_USART_SetTransferDirection(USART1, LL_USART_DIRECTION_TX_RX);

  /* 8 data bit, 1 start bit, 1 stop bit, no parity */
  LL_USART_ConfigCharacter(USART1, LL_USART_DATAWIDTH_8B, LL_USART_PARITY_NONE, LL_USART_STOPBITS_1);

  /* No Hardware Flow control */
  /* Reset value is LL_USART_HWCONTROL_NONE */
  // LL_USART_SetHWFlowCtrl(USARTx_INSTANCE, LL_USART_HWCONTROL_NONE);

  /* Oversampling by 16 */
  /* Reset value is LL_USART_OVERSAMPLING_16 */
  //LL_USART_SetOverSampling(USARTx_INSTANCE, LL_USART_OVERSAMPLING_16);

  /* Set Baudrate to 115200 using APB frequency set to 56000000 Hz */
  /* Frequency available for USART peripheral can also be calculated through LL RCC macro */
  /* Ex :
      Periphclk = LL_RCC_GetUSARTClockFreq(Instance); or LL_RCC_GetUARTClockFreq(Instance); depending on USART/UART instance
  
      In this example, Peripheral Clock is expected to be equal to 56000000 Hz => equal to SystemCoreClock
  */
  LL_USART_SetBaudRate(USART1, SystemCoreClock, LL_USART_PRESCALER_DIV1, LL_USART_OVERSAMPLING_16, BandTable[Brd]);

  /* (5) Enable USART *********************************************************/
  //--禁止ID匹配中断-Disable Character Match Interrupt
  LL_USART_DisableIT_CM(USART1);
  
  LL_USART_Enable(USART1);
  /* Polling USART initialisation */
  while((!(LL_USART_IsActiveFlag_TEACK(USART1))) || (!(LL_USART_IsActiveFlag_REACK(USART1))))
  {
  }
  /* Enable RXNE and Error interrupts */
  LL_USART_EnableIT_RXNE(USART1);
  //  LL_USART_EnableIT_ERROR(USART1);
  //--设置为接收模式--
   RS485_DE_RXD();
}




使用特权

评论回复
沙发
shenxiaolin|  楼主 | 2022-12-27 09:32 | 只看该作者
我看了一下参考手册,额没有介绍产生这个现象的原因。

使用特权

评论回复
板凳
uytyu| | 2023-1-5 14:39 | 只看该作者
485通信怎么还有这个错误              

使用特权

评论回复
评论
shenxiaolin 2023-1-6 09:04 回复TA
的确出现了这个问题,主要是在设备上电的时候会自动发送一次地址,而级联的时候就出问题了 
地板
sesefadou| | 2023-1-11 20:59 | 只看该作者
这个没有测试过。              

使用特权

评论回复
5
cashrwood| | 2023-1-19 19:46 | 只看该作者
这个overrun是什么?              

使用特权

评论回复
6
shenxiaolin|  楼主 | 2023-2-1 11:15 | 只看该作者
目前已经解决了,由于在485 使用的时候,总线上如果出现不同的波特率的话,就会出现这个现象,

使用特权

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

本版积分规则

认证:运达电气-产品经理
简介:毕业于西南科技大学,从事MCU、MPU开发工作近8年,熟悉嵌入式软硬件开发流程,产品管理以及现场项目管理。

90

主题

1128

帖子

6

粉丝