shenxiaolin 发表于 2022-12-27 09:25

STM32G030CBT6 485级联出现 Over Run error

最近使用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);

/* (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通信怎么还有这个错误            

sesefadou 发表于 2023-1-11 20:59

这个没有测试过。            

cashrwood 发表于 2023-1-19 19:46

这个overrun是什么?            

shenxiaolin 发表于 2023-2-1 11:15

目前已经解决了,由于在485 使用的时候,总线上如果出现不同的波特率的话,就会出现这个现象,
页: [1]
查看完整版本: STM32G030CBT6 485级联出现 Over Run error