文档介绍:修改 .
在 Define 项输入 USE_STDPERIPH_DRIVER, STM32F10X_HD
口使用
步骤 1:配置时钟
配置时钟有三个相关的常用函数
RCC_AHBPeriphClockCmd
RCC_APB2PeriphClockCmd
RCC_APB1PeriphClockCmd
这三个函数的区别可以理解为对不同的对象配置时钟
步骤 2: 端口初始化
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 初始化端口
其中,
typedef struct {
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
} GPIO_InitTypeDef;
GPIO_Mode_AF_PP 复用推挽输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_IPU 上拉输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_AIN 模拟输入
步骤 3:调用读取或写入的函数
GPIO_SetBits(GPIOC, GPIO_Pin_6);//把某个端口置位
GPIO_ResetBits(GPIOC, GPIO_Pin_6);//把某个端口置零
GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5);//把某个端口输出的状态读进来
GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_5)//把某个端口的值读出来
单片机的内部可靠性高,但外部的可靠性就就比较低了,尤其是输入信号时经常受到外界干扰或机械性能的限
制。要提高按键输入可靠性,我们就必须要解决按键开关的抖动问题。由于按键是机械触点,当机械触点断开、闭
合时,会有抖动,输入端的波形这种抖动对于人来说是感觉不到的,但对单片机来说,则是完全可以感应到的,因
为单片机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,这已是一个“漫长”的时间了。这样有可能
导致被执行的部分多次执行。
这段程序是防抖之后的:
if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_5)) //S1
{
Delay(0x15);
if(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_5))
{
GPIO_SetBits(GPIOC, GPIO_Pin_6);// D1 亮
Delay(0x10FFFF);
GPIO_ResetBits(GPIOC, GPIO_Pin_6); //D1 灭
}
}
中断的使用
基本概念
STM32 目前支持的中断共 84 个(16 个内部+68 个外部),还有 16 级可编程的中断优先级的设置,仅使用中断
优先级设置 8bit 中的高 4 位。
STM32 可支持 68 个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制
字节 PRI_n(8 位,但是 STM32 中只使用 4 位,高 4 位有效),每 4 个通道的 8 位中断优先级控制字构成一个 32 位的
优先级寄存器。68 个通道的优先级控制字至少构成 17 个 32 位的优先级寄存器。
4bit 的中断优先级可以分成 2 组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,
4bit 一共可以分成 5 组
第 0 组:所有 4bit 用于指定响应优先级;
第 1 组:最高 1 位用于指定抢占式优先级,后面 3 位用于指定响应优先级;
第 2 组:最高 2 位用于指定抢占式优先级,后面 2 位用于指定响应优先级;
第 3 组:最高 3 位用于指定抢占式优先级,后面 1 位用于指定响应优先级;
第 4 组:所有 4 位用于指定抢占式优先级。
所谓抢占式优先级和响应优先级,他们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级
的中断处理过程中被响应,即中断嵌套。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个
中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根
据他们的响应优先