STM32CubeMX serial port transceiver + variable long-term data reception + pirntfl use

Understand first, then code, and finally code directly to CV

 First, accept the variable length data method (use DMA to save CPU space)

 

 

 

 

 

 

interrupt callback function

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
	if(huart==&huart1)
	{
		HAL_UART_Transmit_DMA(&huart1,rx_buff,sizeof(rx_buff));
		//HAL_UART_Transmit_DMA(&huart1,"\r\n",sizeof("\r\n"));
		
		HAL_UARTEx_ReceiveToIdle_DMA(&huart1,rx_buff,sizeof(rx_buff));
		__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);
		
	}

}

 The very first to accept the launch!

uint8_t rx_buff[50];



HAL_UARTEx_ReceiveToIdle_DMA(&huart1,rx_buff,sizeof(rx_buff));
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);
	

Put it in USART.H

extern DMA_HandleTypeDef hdma_usart1_rx;

This is redirecting printfl so you can easily play with printfl 

#define printfl(...) HAL_UART_Transmit(&huart1,(uint8_t*)u_buff,sprintf((char *)u_buff,__VA_ARGS__),0xffff)
uint8_t u_buff[256];	

This is the most common accept interrupt callback function 

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){

	if(huart->Instance==USART1){
	printfl("rx_buf=%s\r",rx_buf);
	}

}

add a little whatever

Timer capture interrupt callback and ordinary timer interrupt

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
	if(htim->Instance==TIM4){
		key_up=HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_1);
		
		printfl("%fs\r",(float)(key_up));
		TIM4->CNT=0;
	}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	if(htim->Instance==TIM3){
		printfl("cw_666\r\n");
	}
}

 

        

Guess you like

Origin blog.csdn.net/weixin_63163242/article/details/132029849