STM32中断与DMA通信编程学习

STM32中断与DMA通信编程学习

1.stm32中断

1.中断原理

中断是由内核外部产生的,一般由硬件引起,比如外设中断和外部中断等。
处理器和外部设备的数据传输方式:

1636267684865

中断全过程:

1636267697469

中断过程执行示意图:

1636267713523

中断的作用:

1636267726468

中断优先级:

1636267743813

中断响应过程:

1636267802098

2. 通过中断控制LED灯(使用cubemx软件)

1.项目生成

1.新建项目选择自己的开发板型号

1636268082554

2.选择PC13(即板载的LED灯)设置为GPIO_Output输出模式,PB9设置为GPIO_EXTI9中断模式

1636268062551

3.设置PB9的GPIOmode

1636268214703

4.将PC13引脚默认设置为高

1636268276081

5.SYS配置为serialwire

1636268323533

6.在NVIC中开启中断

1636268372166

7.将项目名称等设置好生成代码。

2.编写代码

在main.c文件中加上如下代码,他是中断回调函数中断时便会调用这个函数。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    /* Prevent unused argument(s) compilation warning */
    HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);  //翻转电平
    /* NOTE: This function Should not be modified, when the callback is needed,
             the HAL_GPIO_EXTI_Callback could be implemented in the user file
     */
}

3.编译烧录运行观察结果

可以发现将PB9线接上拔掉都会使这个LED发生变化

3.编写代码实现串口中断

1.通过cubemx生成项目

依然是依靠cubemx创建一个项目

大部分设置照旧

这里要设置串口,选择USART1,将他设置成异步(Asynchronous)模式,在下方可以看到他的一些相关参数

1636270024578

1636270072948

2.设置使能中断

1636270095312

3.其他照旧设置,生成项目。

2.在keil中编写代码

在while中添加如下语句,通过串口发送“hello windows"

HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff));
HAL_Delay(1000);

3.通过flymcu烧录

1636379730983

4.运行结果

1636379806921

五、总结
通过本次实验了解了中断的使用方法,学习了DAM发送数据。

4.参考文献

https://blog.csdn.net/m0_58414679/article/details/121060073?spm=1001.2014.3001.5501
https://blog.csdn.net/as480133937/article/details/104827639/

posted @ 2021-11-08 22:09  Sioalq  阅读(271)  评论(0编辑  收藏  举报
Live2D