STM32CUBEMX UART中断进了3次

2019-07-14 16:28发布

STM32F405做的实验

首先我定义了3字节的数组
UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint8_t uart_receive[3]={0};    //看这里
uint8_t uart_transmit[3]={0};
uint16_t uart_len =3;
uint8_t  *uart_recv =(uint8_t  *)&uart_receive;
uint8_t  *uart_tran =(uint8_t  *)&uart_transmit;
/* USER CODE END PV */

然后再main()里面开接收中断
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
    HAL_UART_Receive_IT(&huart2,uart_recv, uart_len);    //看这里

再然后中断里什么都没写
void USART2_IRQHandler(void)
{
  HAL_UART_IRQHandler(&huart2);//清中断
HAL_UART_Receive_IT(&huart2,uart_recv, 1);//开中断
}


上位机随意发送3字节,进了3次中断
所以,STM32FCUBEMX的UART进中断
不是根据用户数组字节长度进中断,而是接一字节进一次中断
所以长数组接收的,或者较高波特率通讯的,最好不要在中断里做数据处理
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
szzjfyp
1楼-- · 2019-07-14 23:05
 精彩回答 2  元偷偷看……
嘻嘻爱哈哈
2楼-- · 2019-07-15 01:29
中断处理函数,还是不要做过多的操作。
建议仅执行:数据<->缓冲区,这样可以节省中断占用的时间。保证其他任务/主循环等函数的及时响应。
ctwewer
3楼-- · 2019-07-15 02:13
楼主:每次接收中断里uart_receive指针好像应该++?
jfdgs
4楼-- · 2019-07-15 04:28
在接收中断中要将所接收数据放入缓存,并将接收缓存指针下移。
zhe0010
5楼-- · 2019-07-15 04:37
因为ST的MCU没有FIFO,所以操作UART、I2C等时还是使用DMA更好些
dull20112011
6楼-- · 2019-07-15 07:19
 精彩回答 2  元偷偷看……

一周热门 更多>