STM32中断和串口通信

本文详细介绍了在STM32上实现中断控制LED亮灭和串口通信的过程。通过新建工程、配置中断和串口参数,实现了中断响应LED的翻转,并通过UART进行数据收发,包括接收中断和DMA接收发数据。实验结果表明,中断和串口通信能有效提高程序效率。
摘要由CSDN通过智能技术生成

目录

一.中断实现LED亮灭

1.新建工程

2.编译写程序

3. 烧录

4.实验结果

二.串口通信

 1.创建工程

2.重定向printf和scanf

 4. UART接收中断

4.1 代码实现:

4.2实验成果

 三、串口DMA接收发数据

1.创建工程 

2. 测试例程1

3. 测试结果

 4. 测试例程2

 5测试程序

四.心得

五.参考文献


一.中断实现LED亮灭

1.新建工程

1.1选择芯片

 1.2 设置led,PA5引脚和外部中断EXTI1,PB1

 1.3给中断设置下降沿触发,并且上拉电阻。

 1.4 配置中断优先级,因为此处只有一个中断,因此它的优先级为0,为最高

1.5配置时钟,设时钟频率为72MHZ

 1.6自动生成程序

2.编译写程序

可以看到生成的中断服务函数  void EXTI1_IRQHandler(void)

 可以看到在这之中调用了HAL_GPIO_EXTI_Callback(),接下来的函数可以看到是_weak开头,则需要用户自己写函数。

  此时到main.c中书写callback程序,用到的库函数是HAL_GPIO_TogglePin(),该函数的作用是翻转电平,即中断一产生,则翻转一次电平。然后编译。

3. 烧录

通电下将boot0置0,然后再次reset后可运行。  

4.实验结果

 此处因为stm32c8t6没有按键,因此选择使用杜邦线代替开关,每接触一次接地,则产生一次中断。

 

二.串口通信

 1.创建工程

RCC和SYS和CLOCK设置如上面一样

下面设置串口USART1,在MODE下选择Asynchronous(异步通信模式),并且使得USART1中断使之能够

 接着就可以直接生成工程了。

2.重定向printf和scanf

之后可以直接使用重定向的函数

  • 在 stm32f1xx_hal.c中包含#include <stdio.h>                                                                   #include <stdio.h>
    extern UART_HandleTypeDef huart1;   //声明串口

 在 stm32f1xx_hal.c 中重写fget和fput函数

/**
  * 函数功能: 重定向c库函数printf到DEBUG_USARTx
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明:无
  */
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0x
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值