【单片机程序】详解IO输入输出方向设置寄存器写法程序来自定义更换引脚与迁移参考程序到工程的流程
前言:详解IO输入输出方向设置寄存器写法程序来自定义更换引脚与迁移参考程序到工程的流程介绍。
目录
1.IO输入输出方向设置程序(寄存器写法)
2.迁移参考程序到工程
1.IO输入输出方向设置程序(寄存器写法)
如下俩行程序为IO输入输出方向设置程序,寄存器写法,接下来讲解如何来自定义更换引脚。
//IO方向设置 PA11 寄存器写法
#define DHT11_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
首先打开STM32F10XXX参考手册
在8.2节有CRH和CRL寄存器的描述
CRH和CRL的区别就是CNFy的值,(GPIO端口是有16个位,引脚O-15)
CRL是引脚0-7,CRH是引脚8-15
本节的使用的引脚是PA11是属于CRH,因此以PA11引脚来举例如何编写这两行程序。
因此打开到8.2.2节端口配置高寄存器(GPIOx_CRH) (x=A..E)
首先看下面有两个框,一个是CNFy[1:0],另一个是MODEy[1:0],分别对应上面的寄存器位。
PA11引脚对应的寄存器就是15:12
这个12就是下面程序中的12出处。
//IO方向设置 PA11 寄存器写法
#define DHT11_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
第一行程序,这个8就是二进制的1000,也就是如下图所示 设置为上拉/下拉输入模式,输入模式(复位后的状态) 。
//IO方向设置 PA11 寄存器写法
#define DHT11_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
接下来就是这个程序中的3,也就是二进制0011,对应设置为通用推挽输出模式,输出模式,最大速度50MHz 。
#define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
然后就是这两行程序中的0XFFFF0FFF,这个0就是将15:12位清零,其它位全为1。
需要注意,代码的&=是用来清零的,|=是用来置位的
//IO方向设置 PA11 寄存器写法
#define DHT11_IO_IN() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
然后就是程序中的GPIOA可以根据你想自定义的引脚端口号来改就行。
程序中的左移<<,就是要将这四位左移到对应的位置,进而实现寄存器操作。
2.迁移参考程序到工程
接下来介绍一下,在迁移程序时的流程。也就是在有参考程序的情况下,如何迁移到自己的工程里。
首先复制参考程序文件夹到自己的工程文件夹中。
然后点击文件管理,添加刚刚复制的文件夹里的.C文件,ADD File
然后就可以看到在自己的工程里出现刚刚复制过来的参考程序。
然后点击魔术棒,点击C/C++,添加这个复制过来的程序文件路径。