然后定义空闲中断处理函数和DMA发送函数- /* USER CODE BEGIN 1 */
- #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__ */
-
- PUTCHAR_PROTOTYPE
- {
- HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
- return ch;
- }
-
- //DMA发送函数
- void Usart1SendData_DMA(uint8_t *pdata, uint16_t Length)
- {
- while(UsartType1.dmaSend_flag == USART_DMA_SENDING);
- UsartType1.dmaSend_flag = USART_DMA_SENDING;
- HAL_UART_Transmit_DMA(&huart1, pdata, Length);
- }
-
- //DMA发送完成中断回调函数
- void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
- {
- __HAL_DMA_DISABLE(huart->hdmatx);
- UsartType1.dmaSend_flag = USART_DMA_SENDOVER;
- }
-
- //串口接收空闲中断
- void UsartReceive_IDLE(UART_HandleTypeDef *huart)
- {
- uint32_t temp;
-
- if((__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE) != RESET))
- {
- __HAL_UART_CLEAR_IDLEFLAG(&huart1);
- HAL_UART_DMAStop(&huart1);
- temp = huart1.hdmarx->Instance->NDTR;
- UsartType1.rx_len = RECEIVELEN - temp;
- UsartType1.receive_flag=1;
- HAL_UART_Receive_DMA(&huart1,UsartType1.usartDMA_rxBuf,RECEIVELEN);
- }
- }
-
- /* USER CODE END 1 */
|