STM32——串口中断接收

  • 1. 配置 GPIO 时钟、串口时钟、复用时钟
  • 2. 配置 GPIO 结构体
  • 3. 配置串口
  • 1. 2. 3. 步骤基本框架在 [5. STM32——串口发送字符、字符串 + printf 的重定向](https://blog.csdn.net/weixin_46105931/article/details/120385156?spm=1001.2014.3001.5501)
  • 4. 配置中断 NVIC 抢占优先级
    • 在 misc.h 头文件中查找相关函数函数
    • USART1_IRQn 在 stm32f10x.h 头文件中查找相关函数函数
  • 5. 搭建串口中断服务函数
    • USART1_IRQHandler 在 startup_stm32f10x_hd.s 文件中查找
  • 用串口发送数据点亮LED
    • usart.c
    • usart.h
    • main.c
    • 点灯成功

1. 配置 GPIO 时钟、串口时钟、复用时钟

2. 配置 GPIO 结构体

3. 配置串口

1. 2. 3. 步骤基本框架在 5. STM32——串口发送字符、字符串 + printf 的重定向

4. 配置中断 NVIC 抢占优先级

在 misc.h 头文件中查找相关函数函数

USART1_IRQn 在 stm32f10x.h 头文件中查找相关函数函数

//4. 配置中断抢占优先级
NVIC_InitTypeDef nvicInitStructure//4.1 配置优先级组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)//4.2 配置结构体
nvicInitStructure.NVIC_IRQChannel                   =  USART1_IRQn;
nvicInitStructure.NVIC_IRQChannelPreemptionPriority =  1;
nvicInitStructure.NVIC_IRQChannelSubPriority        =  1;
nvicInitStructure.NVIC_IRQChannelCmd                =  ENABLE;//4.3 初始化结构体
NVIC_Init(&nvicInitStructure);

5. 搭建串口中断服务函数

USART1_IRQHandler 在 startup_stm32f10x_hd.s 文件中查找

//5. 搭建串口中断服务函数
void USART1_IRQHandler(void)
{char temp;if( USART_GetITStatus(USART1, USART_IT_RXNE) != RESET ) //发生中断{temp=USART_ReceiveData(USART1);if(temp=='O'){GPIO_ResetBits(GPIOC, GPIO_Pin_13);USARTSendStr(USART1, "LED is open");}else if(temp=='C'){GPIO_SetBits(GPIOC, GPIO_Pin_13);USARTSendStr(USART1, "LED is close");}}}

用串口发送数据点亮LED

usart.c

#include "usart.h"
#include "stm32f10x.h"void usart_init()
{GPIO_InitTypeDef   gpioInitStructure;USART_InitTypeDef usartInitStructure;NVIC_InitTypeDef     nvicInitStructure;//1.配置时钟//1.1配置GPIOA、串口时钟、复用时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//2.配置GPIOA结构体//2.1 A9 TXgpioInitStructure.GPIO_Mode     = GPIO_Mode_AF_PP;gpioInitStructure.GPIO_Pin       = GPIO_Pin_9;gpioInitStructure.GPIO_Speed  = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpioInitStructure);//2.2 A10 RXgpioInitStructure.GPIO_Mode        = GPIO_Mode_IN_FLOATING;gpioInitStructure.GPIO_Pin     = GPIO_Pin_10;GPIO_Init(GPIOA, &gpioInitStructure);//3.配置串口结构体usartInitStructure.USART_BaudRate                = 115200;usartInitStructure.USART_HardwareFlowControl  = USART_HardwareFlowControl_None;usartInitStructure.USART_Mode                 = USART_Mode_Tx | USART_Mode_Rx;usartInitStructure.USART_Parity                    = USART_Parity_No;usartInitStructure.USART_StopBits                = USART_StopBits_1;usartInitStructure.USART_WordLength             = USART_WordLength_8b;//3.1 初始化串口USART_Init(USART1, &usartInitStructure);//3.2 配置串口中断USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//3.3 使能串口USART_Cmd(USART1, ENABLE);//4.配置NVIC中断优先级//4.1 配置优先级组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//4.2 配置NVIC优先级结构体nvicInitStructure.NVIC_IRQChannel                   =  USART1_IRQn;nvicInitStructure.NVIC_IRQChannelPreemptionPriority =  1;nvicInitStructure.NVIC_IRQChannelSubPriority      =  1;nvicInitStructure.NVIC_IRQChannelCmd              =  ENABLE;//4.3 初始化NVIC优先级NVIC_Init(&nvicInitStructure);}void USARTSendByte(USART_TypeDef* USARTx, uint16_t Data)
{USART_SendData( USARTx, Data);while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
}void USARTSendStr(USART_TypeDef* USARTx, char* str)
{uint16_t i=0;while( *(str+i) != '\0' ){/*USART_SendData( USARTx, *(str+i));while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );*/USARTSendByte( USART1, *(str+i) );i++;}while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
}

usart.h

#include "stm32f10x.h"
#include <stdio.h>void usart_init(void);
void USARTSendByte(USART_TypeDef* USARTx, uint16_t Data);
void USARTSendStr(USART_TypeDef* USARTx, char* str);

main.c

#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "shake.h"
#include "relay.h"
#include "exti.h"
#include "usart.h"
#include "tim.h"void delay(uint16_t time)
{uint16_t i=0;while(time--){i=10000;while(i--);}
}int  main()
{//      usart_init();LED_Init();tim_Init();GPIO_SetBits(GPIOC, GPIO_Pin_13);//      USARTSendByte(USART1, 'O');
//      USARTSendByte(USART1, 'K');
//      printf("Yinyuer is a pretty girl!");while(1){}
}//5. 搭建串口中断服务函数
void USART1_IRQHandler(void)
{char temp;if( USART_GetITStatus(USART1, USART_IT_RXNE) != RESET ){temp=USART_ReceiveData(USART1);if(temp=='O'){GPIO_ResetBits(GPIOC, GPIO_Pin_13);USARTSendStr(USART1, "LED is open");}else if(temp=='C'){GPIO_SetBits(GPIOC, GPIO_Pin_13);USARTSendStr(USART1, "LED is close");}}}

点灯成功

6. STM32——用串口发送数据点亮LED(串口的中断接收)相关推荐

  1. [STC89C52RC]通过串口发送指令点亮LED

    目录 一.串口 1.串口基本认知 2.串口通信 3.串口编程寄存器 3.1串行口相关寄存器 3.2串行口控制寄存器SCON和PCON 二.串口中断 2.1中断的触发 三.字符串型指令控制LED代码 3 ...

  2. STM32WB55_NUCLEO开发(9)----接收手机数据点亮LED

    概述 本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过与STM32WB配对,向该特征写入一个任意字节,绿色LED会切换. 最近在弄ST和瑞萨RA的课程,需要样片的可以加群 ...

  3. 普中单片机--串口通信(2)---通过串口助手发送数据点LED

    普中单片机–串口通信(2) 通过串口助手发送数据 点亮LED 软件部分 #include <reg52.h> #define jingzhen 12000000UL /*使用12.0M晶体 ...

  4. android串口发送二进位,stm32107串口发送数据的数据用串口助手接收发现数据不对...

    下面是我用的STM32单片机串口5的初始化 然后再主函数里面一直发送数据 串口助手的相关配置和串口的配置一样 但是接收的数据和自己发送的数据不一致下面是串口5的初始化(单片机用的是CP2102芯片转U ...

  5. 51单片机:电脑向串口发送数据并控制LED灯

    电脑向串口发送数据后,控制LED灯,并返回发送的数据 程序如下 #include"regx52.h" #include"intrins.h" unsigned ...

  6. STM32笔记2-使用库函数点亮LED灯

    目录 一.硬件电路设计 二.软件设计 1.工程配置 2.程序编写 (1)led头文件 (2)Led_Init()函数编写 三.实验测试 四.使用宏定义 1.修改后的led.h中程序 2.修改后的Led ...

  7. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收

    串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...

  8. java串口发送16进制_串口发送数据——字符串发送与十六进制发送的区别

    在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照 ...

  9. linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A

    如题,在追踪串口中断接收字符接口UART_getc()    到底层,其调用的是 typedef int32_t     (*UART_ReadPollingFxn)    (UART_Handle ...

最新文章

  1. Docker安全性支持(使用Cgroups机制实现容器资源控制)
  2. 【Java注解】注解基础
  3. JavaScript语言精粹_JSON
  4. 深入Linux PAM体系结构
  5. 宏病毒的研究与实例分析05——无宏文件携带宏病毒
  6. 拓展视野学习前端,我推荐这些
  7. SpringShell文档阅读笔记-SpringShell的基本使用
  8. 学习webpack4 - ES6语法转化
  9. endpointimpl怎么填参数_App拉新:以老拉新活动怎么做?
  10. Redis数据结构——简单动态字符串-SDS
  11. linux brctl
  12. 《少年派的奇幻漂流》:美的漂流,生的思索!
  13. linux mysql5.7免安装版配置_MySQL5.7免安装版配置
  14. PyQtGraph库的部分踩坑记录
  15. 16位浮点数(FP16)
  16. springboot停车场车辆定位管理可视化分析系统的设计与实现毕业设计源码101702
  17. 16k a4_A4纸和16K的纸张大小有没有区别
  18. iPhone 4与iPad开发基础教程
  19. eNSP—静态路由+NAT网络地址转换
  20. KNN的数据插补方法总结

热门文章

  1. 关闭WINDOWS服务
  2. 直播回顾丨MeterSphere一站式开源持续测试平台的初心与方向
  3. easyUI treeGrid 编辑网格
  4. SQLServer附加数据库5120错误
  5. 文件预览:Markdown文件预览
  6. QT:控件精讲(六)显示组件DisplayWidgets
  7. vue2实现数组push/pop/shift/unshift方法重写
  8. 在 Java 中 new 一个对象的流程是怎样的?
  9. iOS - 避免App界面多点触控
  10. 计算机中的位,字节,字的 关系