STM32入门学习笔记之GPIO输入输出实验(下)

5.2.5 端口输出数据寄存器:gpiox_odr(x=a..e)31302928272625242322212019181716
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
bit 15~bit 0:端口输出数据(这些位属于只读并只能以字的形式操作)
注:在输入模式下,odr的数据可以控制端口内部是上拉还是下拉,写入1意味着端口上拉输入。
5.3 gpio的输入与输出例程我们现在在pa0端口接一个按键,pa端口接一个led,当按下按键的时候,led以100ms亮,100ms灭,抬起按键后led常亮。
(1)在stm32f103x.h文件中添加gpio的结构体和地址映射。
(2)在headerware目录下创建gpio文件夹,并创建gpio.c和gpio.h两个文件。
(3)在gpio.h文件中输入以下内容:
(4)在gpio.c文件中输入以下内容
(5)将gpio.c文件和gpio.h文件添加进项目
(6)在1.c文件中输入以下内容:
注:实验中,按键一端接gnd,led一端接vcc,所以按键是检测到0代表按下,端口输出低电平代表led点亮。
5.4 cm3内核的位带操作cortex-m3内核中有一个非常有用的功能,叫做位带操作,支持了位带操作以后,可以使用普通的加载/存储指令来对单一的比特进行读写。在cm3中,有两个区中实现了位带。其中一个是sram区的最低1mb范围,第二个则是片内外设区的最低1mb范围。这两个区中的地址除了可以像普通的ram一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个32位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。下图从另一个侧面演示比特的膨胀对应关系。
欲设置地址0x20000000中的比特2,则使用位带操作的设置过程如下图所示。
30年前其实就已经有位带操作的概念了,自8051单片机开始,到现在的cm3内核,位带操作有什么优越性呢?最容易想到的就是通过gpio的管脚来单独控制每盏led的点亮与熄灭。另一方面,也对操作串行接口器件提供了很大的方便(典型如74hc165,cd4094)。位带操作使代码更简洁,这只是位带操作优越性的初等体现,位带操作还有一个重要的好处是在务中,用于实现共享资源在任务间的“互锁”访问。多任务的共享资源必须满足一次只有一个任务访问它——亦即所谓的“原子操作”。
5.5 利用位带操作实现gpio的输入与输出现在利用位带操作来实现上一题目中的功能。
(1)在sys.h文件中添加实现位带操作的代码。
(2)修改gpio.h中的代码如下图所示。
(3)修改gpio.c中的代码如下图所示。
(4)修改1.c中的代码如下图所示。
5.6 外部中断的实现关于stm32f103的中断机制在之前已经详细讲述过,现在利用外部中断来实现上一题目的功能。
(1)修改gpio.c中的代码如下图所示。
(2)添加代码到文件stm32f103.h中。
(3)修改1.c中的代码如下图所示。

欧拉和鸿蒙推动两国企业对接交流
这次被物联网垂青的的是航空业
意法半导体展示可快速部署的智能电网和移动物联网连接创新技术
FCU1104双网数采网关在“碳中和”目标下的在线能耗监测方案
扬尘智能监控预警系统厂家
STM32入门学习笔记之GPIO输入输出实验(下)
OPPO Reno贴心的小细节
澳大利亚唱片公司与VR直播界的老大哥NextVR达成合作
贸泽电子即日起备货LMZM33602和LMZM33603电源模块
气焊和电焊设备的使用方法
3D视频主要优势体现在哪几个方面?
中低速物联网市场最火的“网红猫”:广和通LTE Cat1模组助物联网企业出奇制胜
北京将建4G试验网
ne5532芯片功能和作用 ne5532工作电压范围
Android Studio Dolphin稳定版正式发布
医疗技术专属解决方案的发展概述
小米MAX2最新消息:小米MAX2明天发布,6.44寸大屏+5000毫安电池,长续航挡脸神器?
华为Mate10什么时候上市?华为Mate10最新消息:华为Mate10发布会邀请函曝光,四大信息提前看
详细解析二相电机反转的改变方法
色码电感器的检测方法