新手上路
- 积分
- 34
- 金钱
- 34
- 注册时间
- 2020-11-5
- 在线时间
- 19 小时
|
用的是stm32f103cbt6. hal库
移植了freemodbus从机协议,用modbus poll调试,通信没有问题,没有出现掉包(timeout error)问题。
然后在我们自己的PCB板上跑,PCB板和开发板的区别就是多加了一个modbus收发流控。用modbus poll测试发现通信能连上但掉包很严重,大概100包掉25包左右。
可以帮忙看看是什么情况吗?
附上部分代码。
流控引脚的初始化:
#define FlowControl_GPIO_PORT GPIOA
#define FlowControl_GPIO_PIN GPIO_PIN_15
#define FlowControl_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) /* PA¿ÚʱÖÓʹÄÜ */
void Flow_Control_Init(void)
{
__HAL_RCC_AFIO_CLK_ENABLE();
__HAL_AFIO_REMAP_SWJ_NOJTAG();
GPIO_InitTypeDef gpio_init_struct;
FlowControl_GPIO_CLK_ENABLE();
//flow control A15
gpio_init_struct.Pin = FlowControl_GPIO_PIN; /* PA15Òý½Å */
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* ÍÆÍìÊä³ö */
gpio_init_struct.Pull = GPIO_PULLUP; /* ÉÏÀ­ */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* ¸ßËÙ */
HAL_GPIO_Init(FlowControl_GPIO_PORT, &gpio_init_struct); /* ³õʼ»¯A15Òý½Å */
HAL_GPIO_WritePin(FlowControl_GPIO_PORT, FlowControl_GPIO_PIN, GPIO_PIN_RESET) ;
}
//portserial的代码
void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
/* If xRXEnable enable serial receive interrupts. If xTxENable enable
* transmitter empty interrupts.
*/
if (xRxEnable) //????????modbus????,??????????????
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET) ;
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE); //??????2,??&huart2
}
else
{
__HAL_UART_DISABLE_IT(&huart2,UART_IT_RXNE);
}
if (xTxEnable)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET) ;
__HAL_UART_ENABLE_IT(&huart2,UART_IT_TXE);
}
else
{
__HAL_UART_DISABLE_IT(&huart2,UART_IT_TXE);
}
}
各位大佬帮帮忙!十分感谢!
|
|