6. STM32——用串口发送数据点亮LED(串口的中断接收)
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(串口的中断接收)相关推荐
- [STC89C52RC]通过串口发送指令点亮LED
目录 一.串口 1.串口基本认知 2.串口通信 3.串口编程寄存器 3.1串行口相关寄存器 3.2串行口控制寄存器SCON和PCON 二.串口中断 2.1中断的触发 三.字符串型指令控制LED代码 3 ...
- STM32WB55_NUCLEO开发(9)----接收手机数据点亮LED
概述 本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过与STM32WB配对,向该特征写入一个任意字节,绿色LED会切换. 最近在弄ST和瑞萨RA的课程,需要样片的可以加群 ...
- 普中单片机--串口通信(2)---通过串口助手发送数据点LED
普中单片机–串口通信(2) 通过串口助手发送数据 点亮LED 软件部分 #include <reg52.h> #define jingzhen 12000000UL /*使用12.0M晶体 ...
- android串口发送二进位,stm32107串口发送数据的数据用串口助手接收发现数据不对...
下面是我用的STM32单片机串口5的初始化 然后再主函数里面一直发送数据 串口助手的相关配置和串口的配置一样 但是接收的数据和自己发送的数据不一致下面是串口5的初始化(单片机用的是CP2102芯片转U ...
- 51单片机:电脑向串口发送数据并控制LED灯
电脑向串口发送数据后,控制LED灯,并返回发送的数据 程序如下 #include"regx52.h" #include"intrins.h" unsigned ...
- STM32笔记2-使用库函数点亮LED灯
目录 一.硬件电路设计 二.软件设计 1.工程配置 2.程序编写 (1)led头文件 (2)Led_Init()函数编写 三.实验测试 四.使用宏定义 1.修改后的led.h中程序 2.修改后的Led ...
- ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...
- java串口发送16进制_串口发送数据——字符串发送与十六进制发送的区别
在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照 ...
- linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A
如题,在追踪串口中断接收字符接口UART_getc() 到底层,其调用的是 typedef int32_t (*UART_ReadPollingFxn) (UART_Handle ...
最新文章
- Docker安全性支持(使用Cgroups机制实现容器资源控制)
- 【Java注解】注解基础
- JavaScript语言精粹_JSON
- 深入Linux PAM体系结构
- 宏病毒的研究与实例分析05——无宏文件携带宏病毒
- 拓展视野学习前端,我推荐这些
- SpringShell文档阅读笔记-SpringShell的基本使用
- 学习webpack4 - ES6语法转化
- endpointimpl怎么填参数_App拉新:以老拉新活动怎么做?
- Redis数据结构——简单动态字符串-SDS
- linux brctl
- 《少年派的奇幻漂流》:美的漂流,生的思索!
- linux mysql5.7免安装版配置_MySQL5.7免安装版配置
- PyQtGraph库的部分踩坑记录
- 16位浮点数(FP16)
- springboot停车场车辆定位管理可视化分析系统的设计与实现毕业设计源码101702
- 16k a4_A4纸和16K的纸张大小有没有区别
- iPhone 4与iPad开发基础教程
- eNSP—静态路由+NAT网络地址转换
- KNN的数据插补方法总结