单片机--main函数流程

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++;
		
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值