历史上的今天
返回首页

历史上的今天

今天是: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--;  

  }  

}  


推荐阅读

史海拾趣

登丰微(GSTEK)公司的发展小趣事

歌普电子始终将产品质量视为企业的生命线。公司采用精细化管理模式,并严格执行ISO9001质量管理体系,确保每一件产品都达到高标准。同时,歌普的产品还通过了UL、CSA、TUV等国际安全认证及RoHS2.0、REACH欧盟绿色环保检测,进一步证明了其产品的可靠性和环保性。这些努力使得歌普在市场上获得了广泛的认可,与众多知名企业建立了长期稳定的合作关系。

First Switchtech公司的发展小趣事

为了应对原材料成本上涨和市场竞争加剧的挑战,First Switchtech公司(或类似公司)实施了供应链优化策略。公司通过与上游供应商建立长期合作关系,实现了原材料的稳定供应和成本的有效控制。同时,公司还引入了先进的生产管理系统,提高了生产效率和产品质量。这些措施不仅降低了产品的生产成本,还增强了公司的市场竞争力。

Good-Ark公司的发展小趣事
确保电源稳定可靠,避免电压波动对电路造成影响。
联智(Celfras)公司的发展小趣事

联智的半导体集成电路芯片研发及产业化项目是其发展历程中的又一重要里程碑。该项目总投资高达20亿元,分两期建设。一期项目将建设半导体集成电路模拟芯片封测生产线,预计年产量可达1.5亿颗。二期项目将研发更高功率有线无线融合一体化电源管理芯片和新一代A4WP远距离无线充电芯,同时布局物联网IoT芯片市场。这一项目的实施将进一步提升联智的技术实力和市场竞争力。

CST Master Electronic Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,CST Master决定进军国际市场。然而,国际市场的竞争更加激烈,法律法规和文化差异也给公司带来了不小的挑战。公司积极调整市场策略,加强与当地合作伙伴的合作,逐步打开了国际市场的大门。通过不断的努力,CST Master在国际市场上也取得了一定的份额。

Chen Yang Technologies GmbH & Co KG公司的发展小趣事

在快速发展的过程中,Chen Yang Technologies始终重视内部管理和人才培养。公司推行了一系列创新的管理理念和措施,如扁平化管理、项目制运作等,这些措施有效提高了工作效率和团队协作能力。同时,公司还注重人才培养和引进,通过设立激励机制、提供培训和发展机会等方式,吸引和留住了一批优秀的技术人才和管理人才。

问答坊 | AI 解惑

【转贴】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时地址线数据线复用问题

请教两个使用STM32的FSMC时地址线数据线复用问题:    1. 在使用FSMC时,如果只用到19根地址线,那么A19-A25是不是可以当做通用输入输出口来用?   2. 在使用FSMC时,如果只用到8根数据线,那么D8-D15是不是可以 ...…

查看全部问答>

KEIL C 编译器出现部分语句不编译的情况,求助原因?

#define        SBUFLENS        21 uchar        ArraySPSData [SBUFLENS];                        // data to be ...…

查看全部问答>

S3C24xx 触摸屏 用一段时间后失效

各位大哥,请教一下,     我用 S3C2416 的时候触摸屏用了一会就无效了,     系统没有再进     DdsiTouchPanelGetPoint 函数,     用示波器查看发现     TSXM    TSXP & ...…

查看全部问答>

如何做一个带阻滤波器(二阶)

如题 要求fo=1khz 阻带外抑制度15db 请高手解答阿阿啊啊啊…

查看全部问答>

wince explorer 有人研究吗,有人能描述下这个源代码的执行流程吗

wince下 explorer 有人研究吗,有人能描述下这个源代码的执行流程吗…

查看全部问答>

差不多的结构体,差别怎么这么大呀?

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 ...…

查看全部问答>