串口模型-空闲中断+DMA

新做一个变量

gkbaseusart.c  GK_USARTIDLE_TYPE GKU2;

绑定:

uint8_t GK_usart_init(GK_USARTIDLE_TYPE *myuart,uint8_t usartid)
{
    switch(usartid)//绑定关系
    {
        case 1:myuart->huart=&huart1;break;
        case 2:myuart->huart=&huart2;break;
        //case 3:myuart->huart=&huart3;break;
        default :return 0;    
    }
    HAL_UART_Receive_DMA(myuart->huart, myuart->rxBuf, RECEIVELEN);//确定DMA搬运收货地址
    __HAL_UART_ENABLE_IT(myuart->huart, UART_IT_IDLE);//开启空闲中断
    __HAL_UART_CLEAR_IDLEFLAG(myuart->huart);//优化代码:马上清除一次 防止第一次误报
    return 1;
}

在main调用一下。

此后基本搞定了 已经做好了自动接收的全部设置了。开始通讯吧。

++++++++++++++

it一个天大的事情

void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
     GK_UsartReceive_IDLE(&GKU2);
  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */

  /* USER CODE END USART2_IRQn 1 */
}
 

+++++++++++++

为了测试方便 我们把rtos中

///* USER CODE END Header_StartTask03 */
//void StartTask03(void const * argument)
//{
//  /* USER CODE BEGIN StartTask03 */
//  /* Infinite loop */
//  for(;;)
//  {
//        
//    osDelay(100);
//  }
//  /* USER CODE END StartTask03 */
//}
全部del

然后搬运到APP中 在.C复制上面代码就好  冠以#include "FreeRTOS.h"即可

这样就分离了 方便我们测试 

我们的框架是:

void StartTask03(void const * argument)
{
    esp12s_init();
    for(;;)
    {
        switch(wifiRun)
        {
            case WIFI_INIT:
            {
                esp12s_start_init();
            }break;
            case WIFI_RECEIVE:
            {
                wifi_module_receive();
            }break;
            default:printf("wifi run no this handle = %d\n" , wifiRun); wifiRun = WIFI_INIT; break;
        } 
    osDelay(100);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42381351/article/details/86997102