历史上的今天
今天是:2024年09月20日(星期五)
2018年09月20日 | stm32f407之GPIO(操作寄存器)
2018-09-20 来源:eefocus
四、GPIO
stm32f407VG这款单片机上共有PA-PE共5×16共80个复用IO口,每个通用I / O端口有4个32位配置寄存器(GPIOx_MODERGPIOx_OTYPER GPIOx_OSPEEDR GPIOx_PUPDR),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位的置位/复位寄存器(GPIOx_BSRR),32位锁定寄存器(GPIOx_LCKR)和两个32位的备用功能选择寄存器(GPIOx_AFRHGPIOx_AFRL)。
设置步骤:
1. 使能相关时钟
2. 设置相应的IO口为输入或输出
3. 设置输入\输出的类型
4. 设置输出的速度(如果设置为输入,此步跳过)
5. 如果输出速度>=50M,开启补偿单元
6. 设置上拉下拉寄存器
7. 通过复位置位寄存器和输入输出数据寄存器进行操作。
程序:
[cpp] view plaincopy
/************************************
标题:操作GPIO的练习
软件平台:IAR for ARM6.21
硬件平台:stm32f4-discovery
主频:168M
author:小船
data:2012-01-16
*************************************/
#include
uint32_t Gb_TimingDelay;
void Delay(uint32_t nTime);
void main ()
{
SysTick_Config(SystemCoreClock / 1000); //设置systemtick一毫秒中断
RCC->AHB1ENR |= 0x00000008; //使能GPIOD时钟
RCC->APB2ENR |= (1<<14); //使能syscfg时钟
GPIOD->MODER &= 0x00FFFFFF; //设置PD12,13,14,15输出
GPIOD->MODER |= 0x55000000;
GPIOD->OTYPER &= 0xFFFF0FFF; //设置PD12,13,14,15推挽输出
GPIOD->OSPEEDR &= 0x00FFFFFF; //PD12,13,14,15 速度100m
GPIOD->OSPEEDR |= 0xff000000;
SYSCFG->CMPCR = 0x00000001; //使用IO补偿单元,
//当GPIO速度超过50M的时候要考虑使用此设置
GPIOD->PUPDR &= 0x00FFFFFF; //PD12,13,14,15 无上拉无下拉
GPIOD->BSRRH = 0xf000; //reset register GPIOx_BSRRH, write only
//set register GPIOx_BSRRL, write only
while(1)
{
GPIOD->BSRRH = 0xf000;
GPIOD->BSRRL = 0x1000;
Delay(500);
GPIOD->BSRRH = 0xf000;
GPIOD->BSRRL = 0x1000<<1;
Delay(500);
GPIOD->BSRRH = 0xf000;
GPIOD->BSRRL = 0x1000<<2;
Delay(500);
GPIOD->BSRRH = 0xf000;
GPIOD->BSRRL = 0x1000<<3;
Delay(500);
}
}
void Delay(uint32_t nTime)
{
Gb_TimingDelay = nTime;
while(Gb_TimingDelay != 0);
}
void SysTick_Handler(void)
{
if (Gb_TimingDelay != 0x00)
{
Gb_TimingDelay--;
}
}
上一篇:VR ELF文件的生成与烧录
史海拾趣
|
【转贴】16 bits to packed BCD, 51 ASM. 61周期/80字节 TEST_NUM EQU 65432 ORG 000H MOV R2, #LOW(TEST_NUM) ; #11111111B MOV R3, #HIGH(TEST_NUM); #11111111B ; 65535 CALL BIN2BCD ...… 查看全部问答> |
|
作为一种储能和滤波元件,电容器的性能对电路处理信号的稳定性影响是决定性的;使用在滤波电路,电容器的高频阻抗ESR和高频感抗会对电容器的容量在不同频率下的变化值起决定性的影响,当高频阻抗较高时,产品在高频下工作时的实际容量将下降,感抗 ...… 查看全部问答> |
|
请教两个使用STM32的FSMC时地址线数据线复用问题: 1. 在使用FSMC时,如果只用到19根地址线,那么A19-A25是不是可以当做通用输入输出口来用? 2. 在使用FSMC时,如果只用到8根数据线,那么D8-D15是不是可以 ...… 查看全部问答> |
|
#define SBUFLENS 21 uchar ArraySPSData [SBUFLENS]; // data to be ...… 查看全部问答> |
|
各位大哥,请教一下, 我用 S3C2416 的时候触摸屏用了一会就无效了, 系统没有再进 DdsiTouchPanelGetPoint 函数, 用示波器查看发现 TSXM TSXP & ...… 查看全部问答> |
|
typedef struct { char regAddr; double regValue; char regMast; }reg_A; typedef struct { char regAddr; char regMast; double regValue; }reg_B; 在实际的程序中,我发现:sizeof(reg_A)=24,sizeof(reg_B)=16 ...… 查看全部问答> |




