GPIOLED配置、key、中断NVIC配置
#include "stm32f10x.h"
#include "stm32f10x_gpio.h" //内核,(NVIC)
#include "misc.h" //点亮红色灯 PB5
//step1:使能
Rcc_APB2PeriPhClockCmd(
Rcc_APB2PeriPh_GPIOB,ENABLE);
//step2:定义GPIO初始化结构体变量
GPIO_InitTypeDef a;
a.GPIO_Speed = GPIO_Speed_50MHz;
a.GPIO_Pin = GPIO_Pin_5;
//推挽输出
a.GPIO_Mode = GPIO_Mode_OUT_PP;
//step3:调用GPIO初始化函数
GPIO_Init(GPIOB,&a);
//step4:设置PB5为低电平
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //读取引脚的电平
int i = GPIO_ReadDataInputBit(
GPIOB,GPIO_Pin_5); /*按键初始化*/
Rcc_APB2PeriPhClockCmd(
Rcc_APB2PeriPh_GPIOA,ENABLE);
//step2:定义GPIO初始化结构体变量
GPIO_InitTypeDef a;
a.GPIO_Speed = GPIO_Speed_50MHz;
a.GPIO_Pin = GPIO_Pin_0;
//浮空输入
a.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//step3:调用GPIO初始化函数
GPIO_Init(GPIOA,&a); /*循环读取按键 PA0*/
while(){
int i = GPIO_ReadDataInputBit(
GPIOB,GPIO_Pin_5);
if(i == ){
//按键按下,点亮LED
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}else{
//松开,熄灭灯
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
}
while(){
if(GPIO_ReadDataInputBit(
GPIOA,GPIO_Pin_0) == ){
//按键按下进入这里执行
if(GPIO_ReadDataInputBit(
GPIOB,GPIO_Pin_5) == ){
//每按一次,灯的状态反转
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}else{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
}
} /*NVIC*/
//step1:优先级分组
NVIC_PriorityGroupConfig(
NVIC_PriorityGroup_1;
);
//step2:NVIC初始化结构体
NVIC_InitTypeDef b;
//中断源
b.NVIC_IRQChannel = EXTI0_IRQn;
//抢占优先级
b.NVIC_IRQChannelPreemptionPriority = ;
//子优先级
b.NVIC_IRQChannelSubPriority = ;
//使能
b.NVIC_IRQChannelCmd = ENABLE;
//step3:NVIC初始化函数
NVIC_Init(&b); //中断处理函数
void 中断名_IRQHandler(){
}
void EXTI0_IRQHandler(){ }
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_exti.h" //内核,(NVIC)
#include "misc.h" //点亮红色灯 PB5
//step1:使能
Rcc_APB2PeriPhClockCmd(
Rcc_APB2PeriPh_GPIOB,ENABLE);
//step2:定义GPIO初始化结构体变量
GPIO_InitTypeDef a;
a.GPIO_Speed = GPIO_Speed_50MHz;
a.GPIO_Pin = GPIO_Pin_5;
//推挽输出
a.GPIO_Mode = GPIO_Mode_OUT_PP;
//step3:调用GPIO初始化函数
GPIO_Init(GPIOB,&a);
//step4:设置PB5为低电平
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //读取引脚的电平
int i = GPIO_ReadDataInputBit(
GPIOB,GPIO_Pin_5); /*按键初始化*/
Rcc_APB2PeriPhClockCmd(
Rcc_APB2PeriPh_GPIOA,ENABLE);
//step2:定义GPIO初始化结构体变量
GPIO_InitTypeDef a;
a.GPIO_Speed = GPIO_Speed_50MHz;
a.GPIO_Pin = GPIO_Pin_0;
//浮空输入
a.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//step3:调用GPIO初始化函数
GPIO_Init(GPIOA,&a); /*循环读取按键 PA0*/
while(){
int i = GPIO_ReadDataInputBit(
GPIOB,GPIO_Pin_5);
if(i == ){
//按键按下,点亮LED
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}else{
//松开,熄灭灯
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
}
while(){
if(GPIO_ReadDataInputBit(
GPIOA,GPIO_Pin_0) == ){
//按键按下进入这里执行
if(GPIO_ReadDataInputBit(
GPIOB,GPIO_Pin_5) == ){
//每按一次,灯的状态反转
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}else{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
}
} /*NVIC*/
//step1:优先级分组
NVIC_PriorityGroupConfig(
NVIC_PriorityGroup_1;
);
//step2:NVIC初始化结构体
NVIC_InitTypeDef b;
//中断源
b.NVIC_IRQChannel = EXTI0_IRQn;
//抢占优先级
b.NVIC_IRQChannelPreemptionPriority = ;
//子优先级
b.NVIC_IRQChannelSubPriority = ;
//使能
b.NVIC_IRQChannelCmd = ENABLE;
//step3:NVIC初始化函数
NVIC_Init(&b); //中断处理函数
void 中断名_IRQHandler(){
} void EXTI0_IRQHandler(){ } /*外部中断配置*/
//外部中断结构体
EXTI_InitTypeDef c;
c.EXTI_Line = EXTI_Line0;
c.EXTI_Mode = EXTI_Mode_Interrupt;
c.EXTI_Trigger = EXTI_Trigger_Rising;
c.EXTI_LineCmd = ENABLE;
//外部中断初始化函数
EXTI_Init(&c); //配置外部中断的触发引脚
GPIO_EXTILineConfig(
GPIOPortSourceGPIOC,GPIOPinSourcePin0
);
Rcc_APB2PeriPhClockCmd(
Rcc_APB2PeriPh_GPIOC,ENABLE);
GPIO_InitTypeDef a;
a.GPIO_Speed = GPIO_Speed_50MHz;
a.GPIO_Pin = GPIO_Pin_0;
//浮空输入
a.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC,&a); void EXTI0_IRQHandler(){
GPIO_ResetBits(GPIOB,GPIO_Pin_5); 手动把中断标志位清零
EXTI_ClearITPendingBit(EXTI_Line0);
}
GPIOLED配置、key、中断NVIC配置的更多相关文章
- STM32 NVIC配置详解
例程: /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ...
- NVIC配置中的分组详解
在配置优先级的时候,要注意一个很重要的问题,中断种类的数量. NVIC只可以配置 16 种 中断向量的优先级,也就是说,抢占优先级和响应优先 级的数量由一个 4 位的数字来决定, 把这个 4 位数字的 ...
- Stm32CubeMX5 配置 外部中断
实验使用连接PA8引脚的按键触发中断,外部中断使用双边沿触发,这样就可以检测按键按下与松开,当按键按下时点亮LED, 当按键松开是关闭LED,在中断服务函数中只置位相应的标志,在main函数中具体处理 ...
- 在线配置热加载配置 go-kratos.dev 监听key
paladin https://v1.go-kratos.dev/#/config-paladin example Service(在线配置热加载配置) # service.go type Servi ...
- .NET Core采用的全新配置系统[1]: 读取配置数据
提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个文 ...
- .NET Core采用的全新配置系统[7]: 将配置保存在数据库中
我们在<聊聊默认支持的各种配置源>和<深入了解三种针对文件(JSON.XML与INI)的配置源>对配置模型中默认提供的各种ConfigurationSource进行了深入详尽的 ...
- 两种交换机配置模式,以配置基于端口划分的VLAN为例
关于交换机的配置模式,大体上可以分为两类:其一以CISCO交换机为代表的配置模式,其二以Huawei.H3C交换机为代表的配置模式.其实这两种配置模式并没有本质的不同,只是配置的命令名称和配置方式存在 ...
- apache 虚拟主机详细配置:http.conf配置详解
apache 虚拟主机详细配置:http.conf配置详解 Apache的配置文件http.conf参数含义详解 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd. ...
- AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
随机推荐
- 创建WIFI热点
@echo off:beginecho 笔记本做无线WiFi程序(首次使用请先设置WiFi帐户.)echo 1.设置WiFi帐户,请按1echo 2.开启WiFi功能,请按2echo 3.闭关WiFi ...
- C++ Primer 笔记——语句
switch 内部的变量定义 1.因为C++语言规定,不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一位置,所以有了如下情况: bool bsuccess = false; switch (b ...
- gerrit原理
个人理解: 这个就是审核代码是否合理性的工具,一般是资深研发人工确认代码是否存在缺陷,通过发送邮件通知变化. 也可理解为这个是个git服务器,多一个代码审查的功能. 但是它是个web界面,方便管理 ...
- robocopy的用法,数据库局域网备份
robocopy,我主要是用来进行局域网数据库备份使用,不得不说这个小工具速度还是蛮快的,同时属于系统内置功能,用着还算方便. 这项功能就是RoboCopy,它是一个命令行的目录复制命令,自从Wind ...
- Java 集合Collection与List的详解
1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...
- springboot调用http方式
1.httpclient 2.okhttp 3.feign 安装Gradle包 compile 'org.springframework.cloud:spring-cloud-starter-open ...
- java keystore
JAVA有一个keystore用来存放私钥和证书,该文件是伴随JDK默认存在的,路径默认是/lib/security/cacerts,默认密码是changeit,实际上空密码也可以直接访问 其中cac ...
- [Bjoi2018]二进制
题解: 首先发现性质 只有1个1的区间 或者 奇数个1且0的个数少于2这个区间是不合法的 然后这个东西暴力是比较好处理的 刚开始写的比较傻逼,分几种情况 先把0,1缩在一起 1.k1个0+1+k2个0 ...
- 【bzoj3747】[POI2015]Kinoman
题解: 水题 从左向右维护以每一个作为右端点的最大值 线段树维护 代码: #include <bits/stdc++.h> using namespace std; #define rin ...
- 【bzoj1042】[HAOI2008]硬币购物 背包dp+容斥原理
题解: 计数题 首先考虑容斥 这题很明显加了限制状态就很多 考虑没有限制 显然可以直接dp 然后 我们看一下 容斥 某一个使用>=k张 那么其实就是 f[i-k*c[]] 于是这样就可以做了