我使用的stm32的两路串口收发,两个串口接收中断处理有问题,我现在的处理方式是这样的 /* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart == &huart2) { uRX_buf[RX_cont++] = RX_buf; // HAL_UART_Transmit_DMA(&huart2, uTX_buf, 8); if(RX_cont>63) { RX_cont=0; } } else if(huart == &huart4) { uRX_buf[RX_cont++] = RX_buf4; if(RX_cont>63) { RX_cont=0; } // HAL_UART_Receive_IT(&huart4,&RX_buf4,1);//¡ä??¨²?¨®¨º¨¹?D?? } 我仿真看的确实是进了中断了,但是回调函数中的 else if(huart == &huart4)执行不到,有么有用过的大神给点提示吧,谢谢! |
要改成if(huart->Instance ==USART1 )吗>?
好的我在试下看看 ,谢谢!
大神,你这个方式好像行不通阿回调函数的传递参数只有一个void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
像你这样的写法会报错.
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(huart->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspInit 0 */
/* USER CODE END USART1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */
}
}
谢谢,我找到了这一段代码了,我的问题已经解决了,我的问题其实主要是 两个串口我用的模式不一样一个用的DMA 另一个用的一个用的接收中断,所以产生中断的方式不一样而且我开启的接收中断里面的只接收了一次所哟导致我的中断里面只能接受到一次数据。看来不是中断的问题应该是处理的问题,谢谢你回复我。
楼主这么写没有毛病
我做的项目里面区分串口也是这么写的
if(huart == &huart4)
我觉得问题不在这个地方,先查查其他代码的问题
可以参考以下我的贴的代码
是的,这么写确实没毛病您给提供的思路我看了下,应该也是可行的就是把接收中断 的字符个数设置成1 每次进中断后需要重新再开启中断,相对来说比较麻烦一些 我换成了DMA 接收模式,设置成连续模式拉,应该能方便点,而且一般数据处理我不放在中断回调函数里面,这样对中断时效性有影响我在MAIN 里面处理的。非常感谢您能够给我提供思路。希望以后能多交流。
评分
查看全部评分