main函数流程
举例:串口接收中断、dma发送、定时器检测、dac转换
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
MX_DAC_Init();
MX_TIM3_Init();
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);
HAL_TIM_Base_Start_IT(&htim3);
while (1)
{
if((SeekBuffTwoChar(Uart1AnalyRxBuff,0XFA,0X81 ))==SUCCESS)
{
memset(Uart1AnalyRxBuff,0,256);
DMA_Usart_Send(PowerOnHandshakeCommand,10);//串口发送封装.上电握手命令应答
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
}
if(DmaSendCounterFlag>=1)
{
DmaSendCounterFlag=0;
Character0XFALocated=buffanaly(Uart1AnalyRxBuff,0XFA );
if(Character0XFALocated<=246)
{
if(((Uart1AnalyRxBuff[Character0XFALocated+1])==0X22)&&(Uart1AnalyRxBuff[Character0XFALocated+4]==0x84))
{
EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9]; //正常情况
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
}
}
if((Character0XFALocated>246)&&(Character0XFALocated<252))
{
if(((Uart1AnalyRxBuff[Character0XFALocated+1])==0X22)&&(Uart1AnalyRxBuff[Character0XFALocated+4]==0x84))
{
switch(Character0XFALocated)
{
case 247: EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
break;
case 248: EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
break;
case 249: EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
break;
case 250: EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
break;
case 251: EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
break;
default:
break;
}
}
}
if((Character0XFALocated>=252)&&(Character0XFALocated<=255))
{
switch(Character0XFALocated)
{
case 252:
if((Uart1AnalyRxBuff[Character0XFALocated+1]==0X22)&&(Uart1AnalyRxBuff[Character0XFALocated+4-256]==0X84))
{
EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
}
break;
case 253:
if((Uart1AnalyRxBuff[Character0XFALocated+1]==0X22)&&(Uart1AnalyRxBuff[Character0XFALocated+4-256]==0X84))
{
EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
}
break;
case 254:
if((Uart1AnalyRxBuff[Character0XFALocated+1]==0X22)&&(Uart1AnalyRxBuff[Character0XFALocated+4-256]==0X84))
{
EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
}
break;
case 255:
if((Uart1AnalyRxBuff[Character0XFALocated+1]==0X22)&&(Uart1AnalyRxBuff[Character0XFALocated+4-256]==0X84))
{
EtCo2=Uart1AnalyRxBuff[Character0XFALocated+9-256];
DMA_Usart_Send((uint8_t *)&EtCo2,1); //串口发送EtCo2
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
HAL_Delay(3);
EtCo2=0;
}
break;
default :
break;
}
}
}
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
中断要有中断回调函数
//串口回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
if(Uart1_Rx_Cnt >= 255) //溢出判断
{
Uart1_Rx_Cnt = 0;
}
else
{
Uart1_RxBuff[Uart1_Rx_Cnt] = aRxBuffer; //接收数据转存
Uart1AnalyRxBuff[Uart1_Rx_Cnt] = aRxBuffer;
Uart1_Rx_Cnt++;
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
}
//定时器回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&htim3))
{
DmaSendCounterFlag++;
}
}