资源描述:
《牛人的stm32学习笔记(寄存器版本)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、一、GPIO口的配置STM32的DGPIO口最多可以有7组(GPIOa~GPIOg),而每一组GPIO口均有16个双向IO组成。并且没个IO口均可配置成8种模式(4种输入模式,4种输出模式)。不管配置哪个IO口也不论将其配置成哪种模式(但是配置成哪种模式要看具体应用,参考《中文参考手册》第105页)都可以按以下步骤来进行配置:(1)使能PORTx(x=A~G)时钟这里就得操作寄存器RCC_APB2ENR(32为寄存器)了15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOP
2、GEN76543210IOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOENRCC_APB2ENR的0~15位(06~32位保留)第2~8分别是使能GPIOA~GPIOG时钟的,只要将其置“1”即可,如RCC_APB2ENR
3、=1<<2;就是使能GPIOA的时钟;其余IO口的始终使能一次类推。(2)对相应的IO模式进行配置,低8位配置GPIOx_CRL;高8位配置GPIOx_CRH3130292827262524CNF7[1:0]MODE7[1:0]CNF6[1:0]MODE6[1:0]2322212019
4、181716CNF5[1:0]MODE5[1:0]CNF4[1:0]MODE4[1:0]15141312111098CNF3[1:0]MODE3[1:0]CNF2[1:0]MODE2[1:0]76543210CNF1[1:0]MODE1[1:0]CNF0[1:0]MODE0[1:0]GPIOx_CRL(x=A~G(端口配置低寄存器x=A…E)该寄存器用于配置GPIOx的低8位,具体8种模式的配置见《中文参考手册》例如:GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL
5、=0X00000300;/PD.2推挽输出;其余IO口的
6、低8位以此类推。3130292827262524CNF15[1:0]MODE15[1:0]CNF14[1:0]MODE14[1:0]2322212019181716CNF13[1:0]MODE13[1:0]CNF12[1:0]MODE12[1:0]15141312111098CNF11[1:0]MODE11[1:0]CNF10[1:0]MODE10[1:0]76543210CNF9[1:0]MODE9[1:0]CNF8[1:0]MODE8[1:0]GPIOx_CRH(端口配置高寄存器x=A…E)该寄存器用于配置GPIOx的高8位,具体8种模
7、式的配置见《中文参考手册》例如:GPIOA->CRH&=0XFFFFFFF0;;GPIOA->CRH
8、=0X00000003;//PA8推挽输出;其余IO口的高8位以此类推。(3)端口的输入和输出电平配置15141312111098IDR15IDR14IDR13IDR12IDR11IDR10IDR9IDR876543210IDR7IDR6IDR5IDR4IDR3IDR2IDR1IDR0GPIOx_IDR(端口输入数据寄存器x=A…E)该寄存器配置IO口的0~15位的输入数据,以16位读出。15141312111098ODR15ODR14OD
9、R13ODR12ODR11ODR10ODR9ODR876543210ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0GPIOx_ODR(端口输出数据寄存器x=A…E)该寄存器配置IO口的0~15位的输入初始状态,例如:GPIOA->ODR
10、=1<<13;//PA13上拉输入一般GPIO口配置可仿以下两个程序:voidKEY_Init(void){RCC->APB2ENR
11、=1<<2;//使能PORTA时钟GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入GPIOA->CRL
12、=0X00000008;GPIOA
13、->CRH&=0X0F0FFFFF;//PA13,15设置成输入GPIOA->CRH
14、=0X80800000;GPIOA->ODR
15、=1<<13;//PA13上拉,PA0默认下拉GPIOA->ODR
16、=1<<15;//PA15上拉}voidLED_Init(void){RCC->APB2ENR
17、=1<<2;//使能PORTA时钟RCC->APB2ENR
18、=1<<5;//使能PORTD时钟GPIOA->CRH&=0XFFFFFFF0;GPIOA->CRH
19、=0X00000003;//PA8推挽输出GPIOA->ODR
20、=1<<8;//PA8输
21、出高GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL
22、=0X00000300;//PD.2推挽输出GPIOD->ODR
23、=1<<2;//PD.2输出高}二、串口