与51单片机对比,32单片机控制寄存器要复杂的多;在51单片机中,可以直接控制端口的高低电平;然而32单片机却不可以,因为32为了减小功耗,默认情况下这些时钟都是关闭的,需要打开才能使用;同时它的使用模式也有多种;只用在配置好端口之后才能进行控制。
1:下面以stm32单片机为例:初步学习通过寄存器控制GPIO的方法:
#include "stm32f4xx.h"
int main ()
{
//有很多外设,默认情况下这些外设时钟都是关闭的
//降低功耗,有专门的外设控制,复位时钟控制
//AHB1外设复位
//第一步:打开GPIOF5的时钟
*(unsigned int *)(0x40023800+0x30)|=(1<<5);
//第二步:控制GPIO口的方向----GPIOF配置为输出
*(unsigned int *)(0x40021400+0x00)&=~((0x03)<<(2*9));
*(unsigned int *)(0x40021400+0x00)|=(1<<(2*9));
//第三步:控制GPIO的数据输出寄存器----PF9输出高电平
*(unsigned int *)(0x40021400+0x14)|=(1<<9);
//PF9输出低电平
*(unsigned int *)(0x40021400+0x14)&=~(1<<9);
}
void SystemInit(void)
{
//骗过编译器不报错
}
2:下面通过库函数控制GPIOF9输出
//第一步:打开GPIOF的时钟(之所以是左移5位,是因为ABCEDF,中的F排在5)
RCC_AHB1ENR|=(1<<5);
//第二步:控制GPIO口的方向----GPIOF配置为输出
GPIOF_MODER &=~((0x03)<<(2*9));
GPIOF_MODER |=(1<<(2*9));
//第三步:控制GPIO的数据输出寄存器----PF9输出高电平
GPIOF_ODR |=(1<<9);
//PF9输出低电平
GPIOF_ODR &=~(1<<9);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)