STM32中断与DMA通信编程

这篇博客介绍了如何使用STM32通过中断模式控制LED灯,并采用串口DMA方式以高速率连续发送数据到上位机。首先,通过STM32CubeMX配置中断和GPIO,然后在Keil5中编写代码,实现中断响应控制LED亮灭,并设置串口DMA进行数据传输。最后,烧录代码并观察效果,强调了DMA在提高数据传输效率中的作用。
摘要由CSDN通过智能技术生成

一.stm32中断模式控制LED灯

1.STMCubeMX配置项目

  • 引脚配置:A4输出控制灯的亮灭,A1持续输出高电平,A7持续输出低电平,都设置为GPIO_Output;
    B5模拟开关,设置为GPIO_EXTI5。

在这里插入图片描述

  • 配置exit

在这里插入图片描述

  • 配置SYS
    在这里插入图片描述
  • 配置GPIO
    把A1配置为高电平
    在这里插入图片描述
    A7配置为低电平
    在这里插入图片描述

把B5中断配置为上升沿和下降沿都触发
在这里插入图片描述

  • 配置工程
    在这里插入图片描述
    在这里插入图片描述

2.Keil5完善代码

在stm32f1xx_hal_gpio.c这个文件中找到HAL_GPIO_Callback函数
在这里插入图片描述
改为下列代码:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
      if(GPIO_Pin == EXTI_Pin){
        
        GPIO_PinState pinState = HAL_GPIO_ReadPin(EXTI_GPIO_Port,EXTI_Pin);

        
        if(pinState==GPIO_PIN_RESET)
        HAL_GPIO_WritePin(OUTPUT_GPIO_Port,OUTPUT_Pin,GPIO_PIN_RESET);
        
        else
            HAL_GPIO_WritePin(OUTPUT_GPIO_Port,OUTPUT_Pin,GPIO_PIN_SET);
        }
    }

3.编译之后烧录

在这里插入图片描述

二.STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据

1.Stm32CubeMX配置项目

  • 选择芯片

在这里插入图片描述

  • 配置RCC
    在这里插入图片描述
  • 设置USART1
    在这里插入图片描述
  • 添加两个通道

在这里插入图片描述
在这里插入图片描述

  • 创建项目
    在这里插入图片描述

2.Keil5完善代码

在main.c文件中修改main函数

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
uint8_t message[] = "hello windows!\n";
  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)message, sizeof(message));
	  HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

在这里插入图片描述

  • 编译并烧录
    在这里插入图片描述

3.效果

在这里插入图片描述

总结

了解了什么是DMA,DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

参考

https://blog.csdn.net/qq_47281915/article/details/121024427
https://blog.csdn.net/qq_47281915/article/details/121063896

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值