USART.C
/* USER CODE BEGIN 0 */
/******************************************************************
串口重定义
开串口1与串口3
*******************************************************************/
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
USART_RECEIVETYPE UsartType;
/* USER CODE END 0 */
/* USER CODE BEGIN 1 */
/*****************************************************
串口接收数据,并且判断 串口屏 处于什么情况
******************************************************/
void UsartReceive_IDLE(UART_HandleTypeDef *huart)
{
uint32_t temp;
if((__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE) != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(huart);
HAL_UART_DMAStop(huart);
temp = (*huart).hdmarx->Instance->CNDTR;
UsartType.RX_Size = RX_LEN - temp;
HAL_UART_Receive_DMA(huart,UsartType.RX_pData,RX_LEN);
if(UsartType.RX_pData[UsartType.RX_Size-1]==0xff)
{
UsartType.RX_flag=1;//标志位
}
}
}
/* USER CODE END 1 */
USART.H
/* USER CODE BEGIN Private defines */
#define RX_LEN 1024
typedef struct //定义一个寄存器,串口接收->标记、长度、数据
{
uint8_t RX_flag:1; //IDLE receive flag
uint16_t RX_Size; //receive length
uint8_t RX_pData[RX_LEN]; //DMA receive buffer
}USART_RECEIVETYPE;
extern USART_RECEIVETYPE UsartType;
/* USER CODE END Private defines */
main.C
HAL_UART_Receive_DMA(&huart1, UsartType.RX_pData, RX_LEN); //启动串口1DMA转换通道
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //开启串口1 闲时中断
stm32f1xx_it.c
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
UsartReceive_IDLE(&huart1); //添加这个函数
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}