|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
2 P5 y; C( ?/ Y1 `2 {) H1 ]
6 _/ H% u) Y6 D( V
遇到的问题: |# b0 p" F/ X8 A! r0 a
在while循环中执行中断接收函数,并在回调函数中打印接收到的数据,回调函数调用正常,,0 H' k* l5 o! h
- volatile uint8_t usartTemp[200] ;
- int main(void)
- {
- HAL_Init();
- SystEMClock_Config();
- MX_GPIO_Init();
- MX_USART1_UART_Init();
- MX_USART2_UART_Init();
- HAL_UART_Receive_IT(&huart2,usartTemp,200);
- while (1)
- {
- HAL_UART_Receive_IT(&huart2,usartTemp,200);
- }
- }
- // 数据接收完成后调用回调函数,这里只有usart2接收数据,所以不进行串口对象判断
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- static uint8_t count = 0;
- printf("=============%d============\n",count);
- printf("%s\n",usartTemp);
- count++;
- }
}7 k" v) m2 w* c6 u. `% o, r! R0 B
% U/ O9 _" [2 T" F& k3 g复制代码
# [, _& g$ H6 O! F: x& H; o5 W L% ?( ^$ ]0 d8 H, o( Y2 x% w
& q# N+ @, P0 ~6 q 既然是中断方式接收数据,总不能一直在while中调用吧,,所以,将第一次调用接收函数置于while函数前,然后在回调函数中再次调用接收函数,开启下一轮数据接收,却发现,程序在进行了一次数据接收后就不再接收数据了,打断点确定回调函数中的接收数据函数确实被调用了,然而就是不再进回调函数了,,,,参照网上资料,添加了__HAL_UART_ENABLE_IT后仍然没用,,使用过基于hal的usart中断接收数据的朋友给指点下吧
& I0 C5 t. b: j) L3 D% o+ q( {. D9 B$ g! [: w
- volatile uint8_t usartTemp[200] ;
- int main(void)
- {
- HAL_Init();
- SystemClock_Config();
- MX_GPIO_Init();
- MX_USART1_UART_Init();
- MX_USART2_UART_Init();
- HAL_UART_Receive_IT(&huart2,usartTemp,200);
- // __HAL_UART_ENABLE_IT(&huart2,UART_IT_ERR);
- / __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
- while (1)
- {
- // HAL_UART_Receive_IT(&huart2,usartTemp,200);
- }
- }
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- static uint8_t count = 0;
- printf("=============%d============\n",count);
- printf("%s\n",usartTemp);
- count++;
- while(HAL_UART_GetState(&huart2) == HAL_UART_STATE_BUSY_RX) {}
- HAL_UART_Receive_IT(&huart2,usartTemp,200);
- // __HAL_UART_ENABLE_IT(&huart2,UART_IT_ERR);
- // __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
- }6 w0 t1 q% X7 Y7 m u
! }8 l8 M9 Y6 T" w7 ~复制代码
6 h% F# ? b2 h5 P4 y9 `8 e
S. J7 M, S1 V% _* ]% ^. c, S8 ^ |
|