STM32学习笔记2-按键实验

12.10


一/ 按键实验

工程配置参数:

C/C++: define USE_STDPERIPH_DRIVER,STM32F1X_CL

Debug: TARMSTM.DLL   -pSTM32F107VC

 

GPIO的工作模式:

输入模式:上拉输入,下拉输入,浮空输入,模拟输入

输出模式:推挽输出(输出电平为0和3.3V),开漏输出(电平不匹配的场合,如输出5V的高电平,在外部接上一个上拉电阻,电源为5V),复用推挽,复用开漏(任何一种开漏模式都要接上拉电阻)

 

 

 

PC13代表GPIOC的13号引脚,JSTICK是摇动杆。

 

按键实验:

GPIO端口配置:1.采用上拉输入模式,按键没按下时默认高电平。 2.浮空输入模式,芯片外部已经接了上拉电阻。

 

 

在相应引脚读取的数据为0时,表明可能有按键按下。我们把需要设定的引脚的状态取反后写入,达到翻转的目的。

 

注意配置工程,然后同样的方法LOAD到STM32板上,运行。

 

二/ EXTI按键中断实验:

EXTI: 外部中断,通过GPIO检测输入脉冲,引起中断事件,中断原来代码的执行,进入到中断服务函数中处理,然后再返回到中断之前的代码执行。GPIO可以作为外部中断源的输入,把按键轮询转换为中断处理。

 

中断向量表:Cortex内核的0-15为内核异常,16以上为外部中断。STM32的-3到6为系统异常,7开始为中断,可以设置优先级。在启动文件中有相应的芯片可用的中断向量。

 

NVIC:中断控制器,属于Cortex内核,不可屏蔽中断NMI和外部中断都由它处理,SYSTICK不是。NVIC也被ST库封装成了库函数,有结构体NVIC_InitTypeDef,其中有需要配置的中断向量,使能,抢占优先级和响应优先级(同时到达时比较两个,在一个执行时可以被高抢占优先级的打断)。

 

有5组分配优先级的方式对4位数字进行设置,利用库函数设置组别,只能配置16中优先级,可能有多个中断向量是同一种中断种类,同种的不能嵌套。

PAX-PGX --- > EXTIX:同一时间EXTIX只能响应一个端口的事件,可以分时复用。最常见的用法是加上一个按键,设置为下降沿触发,用中断来检测按键。

 

本实验还要包含stm32f10_exti.c(包含EXTI配置和操作的相关库函数),misc.c(包含NVIC的配置函数),我们在stm32f10_it.c中编写中断服务函数。

 

ST函数库中读取外设状态:XXX_GetFlagStatus()  XXX_ClearFlag()进行相应的标志位清除。

中断函数名:EXTI0_IRQHandler(0~4) , EXTI9_5_IRQHandler

 

 

 

程序流程大致如下:

用PC13来作为中断的IO,当按下KEY时,中断响应函数被调用,此时把灯PB0的状态翻转。

 

 



 

问题:中断处理函数有定义,但是找不到stm32f10_it.c这个文件,我只好在main.c中再写一个。另外就是在project中导入的文件不能用。


按键实验成功了,中断实验还没调通。

你可能感兴趣的:(stm32)