历史上的今天
今天是:2025年08月06日(星期三)
2019年08月06日 | stm32f407之GPIO(操作寄存器)
2019-08-06 来源:eefocus
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. 通过复位置位寄存器和输入输出数据寄存器进行操作。
程序:
/************************************
标题:操作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--; } }
下一篇:STM32 IO寄存器操作
史海拾趣
|
俺想学习FPGA--有偿寻求合作开发FPGA学习板 看到现在FPGA现在这么火爆,忍不住想学习一下。 但是本人对FPGA了解甚少。想寻求高手共同合作搞一个FPGA开发板。 我负责:元件费用,打样费用。以及适当给与合作者一定酬劳(这个不多,呵呵,俺也是 ...… 查看全部问答> |
|
作者: Ian Poole Adrio Communications Ltd 第一部分解释了调幅(AM)和调频(FM)的基础,并阐述了优点和缺点。第二部分解析了频移键控(PSK)和正交幅度调制(QAM)。第三部分讨论扩频通信技术,包括被广泛应用的直接序列扩频通信(DSSS),和 ...… 查看全部问答> |
|
我的wince上咋就不能运行dotnet的程序呢,点击应用程序一点反应也没有,也不报错。另外,保证dotnet的支持包已经打入wince,1.1和2.0都打了。 把SYSGEN_DOTNET和SYSGEN_DOTNET_SUPPORT还有DOTNETV2的所有选项加上,则运行dotnet的程序既不报错 ...… 查看全部问答> |
|
我看很多资料都写得是AD7705的参考电平时2.5v,但是今天看到有人用ref195的输出做AD7705的参考电平,ref195接ref+输出5v,ref-接地请问这样合适吗。 还有AD7705的资料上写着采样范围是0-20mv或0-2.5v,一直不太明白这是什么意思,0-2.5v不是包括0- ...… 查看全部问答> |
|
An unspecified Debug Toolbox call failed 我在使用ADS1.2套件的AXD时,连接了Easyjtag,并进行了设置,但是却出现了如题的An unspecified Debug Toolbox call failed的错误,请高人指点,该如何解决这个问题?… 查看全部问答> |
|
keil编译ARM报--- Error: can't execute 'BIN30\ArmAsm'怎么解决 我安装的keil 3.3版本,以前用来编译C51,现在添加上ARM,操作系统是U COS II,编译时报--- Error: can\'t execute \'BIN30\\ArmAsm\',我把C:\\Keil\\ARM\\BIN30中的ARMASM.EXE拷贝到BIN中无法解决此问题,请教高手要怎么处理… 查看全部问答> |
|
斑竹: 我用vc33-120做了一块卡,外部晶阵是12m,5倍频,定时中断置数30000,理论计算 我的定时中断应该是1000hz,但是发现是100hz,我晶阵换过,都没有用.请教斑竹 最可能是什么原因啊 急!文字… 查看全部问答> |
|
TI OMAP 5平台不仅全面提升了性能,还采用了能够带来新机遇和用户体验的新特性,从而使应用处理器能够满足更广泛的要求。简而言之,OMAP 5平台将以其全新的性能及功能水平推动移动设备的变革,让我们共同开启“变革”新时代!$(\'swf_eBM\').innerH ...… 查看全部问答> |
|
#include #define uchar unsigned char #define uint unsigned int sbit uln=P2^0;//uln2803 sbit DQ=P2^1;//ds18b20与单片机连接口 sbit ming=P2^2;// sbit hong1=P2^3; sbit hong2=P2^4; sbit RS=P2^5; sbit RW=P2^6; sbit EN=P2^7; u ...… 查看全部问答> |




