这里写自定义目录标题
STM32中断与DMA通信编程
一、中断模式编程
1.cubeMX创建项目
2.引脚设置
3.配置exit
3.sys设置
2.keil代码修改
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == SWITCH_Pin){
GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_SET);
}
}
3.烧录
4.结果
二、串口中断
1.cubeMX创建项目
2.sys依然选择serial write
3.设置nvic
2.代码修改
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(c=='0'){
flag=0;
HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, 12,0xFFFF);
}
else if(c=='1'){
flag=1;
HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, 12,0xFFFF);
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
}
3.烧录
4.结果
三、DMA方式
1.cubeMX创建项目
2.代码修改
int main(void)
{
HAL_Init();
uint8_t message[] = "Hello DMA!\n";
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
while (1)
{
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)message, sizeof(message));
HAL_Delay(1000);
}
}
3.烧录
4.结果
四、总结
通过此次实验,我了解了中断是如何进行的,以及在STM32当中中断的使用方法。DMA传输过程不占用CPU资源,可以边传输边运行其他任务,更加高效。通过本实验的学习,我对中断的概念以及串口调试有了更加深刻的理解。随着学的东西越高级,我就越能体会到基础的重要,不能害怕BUG,因为错,才会有经验。
五、参考
STM32中断与DMA通信编程
stm32hal库串口DMA收发
【STM32】HAL库 STM32CubeMX教程十一—DMA (串口DMA发送接收)