void KEY1_IRQHandler(void) { //确保是否产生了EXTI Line中断 if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) { USART_DMACmd(DEBUG_USART, USART_DMAReq_Tx, ENABLE); //清除中断标志位 EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE); } }将代码改为用DMA的方式中断一次发送一次
时间: 2023-05-21 10:04:30 浏览: 231
可以参考下面的代码实现:
void KEY1_IRQHandler(void) {
//确保是否产生了EXTI Line中断
if (EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) {
USART_DMACmd(DEBUG_USART, USART_DMAReq_Tx, ENABLE); //通过DMA方式发送数据
while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_DMAEN) == RESET); //等待DMA传输完成
while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TC) == RESET); //等待数据发送完成
USART_ClearFlag(DEBUG_USART, USART_FLAG_TC); //清除发送完成标志位
EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE); //清除中断标志位
}
}
阅读全文