上一篇我们讲解了如何通过数据手册和库函数手册开发stm32的led驱动(也就是通用gpio的输出功能),今天我们讲解其输入功能实现。接上篇寄存器介绍(stm32根据数据手册完成led驱动开发(寄存器版和库函数版介绍),gpio有关寄存器有7个,本节用到端口配置低寄存器(因为根据电路原理图设计,用到引脚pc5),端口输入数据寄存器。
就开发驱动流程讲,先要看硬件电路接口,定义错了接口,啥功能都实现不了。根据硬件连接情况,我们分析并使用key0进行设计。key0 的一端接地,一端接单片机pc5引脚,表示我们的按键是按下采集低电平信号,也就是读取的数据是0。好,那么我们按照上节课讲解的八种工作模式,我们肯定是输入模式,但是是哪一种呢?这里就需要有一个分析,我们的51单片机p1-p3接口设计的时候都内置了一个弱上拉电阻,所以设计时都是采集低电平信号。同样,我们32这里要配置为上拉输入, 上拉是将不确定信号(上电时极容易误导信号状态)通过一个电阻钳位在高电平,电阻同时限流作用,如果不,那输入口没有了高低电平对比,纵然按键按下接到了地,单片机读取到的是不确定信号,分析自然就会有问题。
我们了解了配置后,只需要再了解下数据输入寄存器。通过对低16位读出,就能了解对应pin引脚的电平情况。
今天呢,我们还要讲解怎么分析库函数《stm32f10x_stdperiph_lib_um.chm》
开发stm32驱动,首先是开启相应的时钟,这要看rcc
中文参考手册的第六章,rcc控制,那么我们就去库函数中的module下找rcc模块,看其中各个函数的意义。
找到这个目录下打开加号,全是函数,其中rcc_apb2periphclockcmd就是今天要用的。你问我怎么知道,因为我把这些基本都了解了一下,大家只需要先跟着我学,做,后面自己熟练了,自己就去探索新功能了。
上面这个函数就是开启相应功能时钟的,再点击到函数中
参数介绍,就有我们按键需要的gpioc时钟。
再然后,我们用到gpio通用输入功能,那就找gpio模块下的函数,有初始化配置(也就是前面说的输入输出模式配置寄存器)函数gpio_init和数据位读取gpio_readinputdatabit函数
好,安排初始化代码
void key_init(){ gpio_inittypedef gpio_initstructure; rcc_apb2periphclockcmd(rcc_apb2periph_gpioc,enable); gpio_initstructure.gpio_mode=gpio_mode_ipu; gpio_initstructure.gpio_pin = gpio_pin_5; gpio_init(gpioc,&gpio_initstructure);}主函数代码
int main(){ delay_init(); led_init(); key_init(); while(1) { if(key0==0) { delay_ms(10); if(key0==0) { gpio_resetbits(gpioa,gpio_pin_8); delay_ms(500); gpio_setbits(gpioa,gpio_pin_8); delay_ms(500); while(!key0); } } }}延时函数我们下节课讲解,涉及时钟问题。
设计师点评,荣耀9、三星S8、锤子坚果Pro谁更惊艳
迎向新版蓝牙5.4标准的必备设计知识!
传统巨头在改变,通用凯雷德配备38英寸OLED曲面显示屏
Leader烟机智能屏将实现厨房家电的智慧互联
基于VxWorks操作系统实现PC/104-CAN适配卡的驱动系统设计
STM32数据手册开发实现按键输入功能
什么是拉电流?什么是灌电流?它们为什么能够衡量输出驱动能力呢?
灵活运用Python中numpy库的矩阵运算
物联网技术能给环境危机带来什么好处
学校多媒体机房统一管理方案的介绍
图解无刷电机原理
用于电动汽车的48V系统
Mini/Micro LED的成本将会快速下降,从而在更多的应用领域落地
国内首个IT云服务智能工业园区落户甘肃
NVIDIA DOCA 1.3增强网络和安全基础设施服务
南大光电:公司光刻胶产品客户验证正在顺利推进
uc3842典型电路
兆易创新荣获北京市科学技术奖一等奖
工控控制系统应该如何应对等保2.0的新要求
IU8202 适用于OWS耳机的无POP声超低功耗400mW单声道G类耳放IC方案