新手上路
- 积分
- 27
- 金钱
- 27
- 注册时间
- 2019-5-26
- 在线时间
- 6 小时
|
1金钱
本帖最后由 睡神耗子 于 2020-4-9 16:06 编辑
用Cubemx生成的库写的STM32F030代码。
下面是接收和发送代码
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART2)
{
gRS485RxData.timeout = 0; //超时清零
gRS485RxData.isReceiving = True; //正在接收数据
if(gRS485RxData.index >= RS485_RX_LEN)
{
gRS485RxData.index = 0; //数据超出范围,清空数据
}
gRS485RxData.buf[gRS485RxData.index] = rs485Data; //获取串口数据
gRS485RxData.index++;
HAL_UART_Receive_IT(pRs485Uart,&rs485Data,1); //注意会调用回调函数
}
}
void RS485_Send(uint8_t *data, uint8_t len)
{
RS485_TX_EN(); //发送使能
DelayMs(2);
HAL_IWDG_Refresh(phiwdg); //喂狗
__disable_irq(); //禁止中断,因为下面的发送函数有时候会使接收中断出现问题,不知道原因
HAL_UART_Transmit(pRs485Uart, data, len, 100);
__enable_irq();
HAL_IWDG_Refresh(phiwdg); //喂狗
DelayMs(2); //延时等待
RS485_RX_EN(); //接收使能
}
问题就是我调用HAL_UART_Transmit函数,
不禁止中断,就大概率下一次接收不到数据,是什么原因?
求大佬告知
|
|