历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2021年02月05日 | STM32F407学习笔记二(GPIO)

2021-02-05 来源:eefocus

从上文可以看到,在系统启动过程中会对系统时钟进行一次配置,有了时钟源以后,我们来看简单的GPIO配置:对于GPIO,使用寄存器进行配置时:我们先来看一个例子:


#include

 

uint32_t Gb_TimingDelay;

void Delay(uint32_t nTime);

 

void main()

{

  SysTick_Config(SystemCoreClock/1000);//1ms based time

  RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;  //ENABLE GPIOD

  RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; //ENABLE SYSCFG

  

  GPIOD->MODER &= 0x00FFFFFF;      //set direction

  GPIOD->MODER |= 0x55000000;

  

  GPIOD->OTYPER &= 0xFFFF0FFF;    //set the way of output:31-16:observed 15-0: 1: output push-pull 0: output open-drain

  

  GPIOD->OSPEEDR &= 0X00FFFFFF;  //speed

  GPIOD->OSPEEDR |= 0XFF000000;

  

  SYSCFG->CMPCR =0X00000001;    //speed CMR

  

  GPIOD->PUPDR= 0X00FFFFFF;   //pull-up or pull-down

  

  GPIOD->BSRRH= 0XF000;       //clear or set

  

  while(1)                     

  {

    GPIOD->BSRRH = 0XF000;    

    GPIOD->BSRRL = 0X1000;

    Delay(100);

    

    GPIOD->BSRRH = 0XF000;

    GPIOD->BSRRL = 0X1000<<1;

    Delay(100);

    

    GPIOD->BSRRH = 0XF000;

    GPIOD->BSRRL = 0X1000<<2;

    Delay(100);

 

    GPIOD->BSRRH = 0XF000;

    GPIOD->BSRRL = 0X1000<<3;

    Delay(100);        

  }    

}

 

void Delay(uint32_t nTime)        //Delay

{

    Gb_TimingDelay = nTime;

    while(Gb_TimingDelay!=0);

}

 

void SysTick_Handle()             //interrupt handle

{

  if(Gb_TimingDelay!=0)

  {

      Gb_TimingDelay--;

  }

}

首先调用了

SysTick_Config,我们来看看这个函数:

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

  if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */

 

 

  SysTick->LOAD  = ticks - 1;                                  /* set reload register */

  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */

  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

                   SysTick_CTRL_TICKINT_Msk   |

                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */

  return (0);                                                  /* Function successful */

}


可以看到这是对时钟中断进行配置,

每隔168000000/1000 *1/168000000=1ms产生一次中断。


我们重点看GPIO寄存器·:

1.GPIO端口模式寄存器GPIOx_MODER





2.GPIO端口输出类型寄存器GPIOx_OTYPER




3.GPIO端口输出速度控制器GPIOx_OSPEEDR



4.GPIO端口上拉下拉寄存器GPIOx_PUPDR



5.GPIO端口置位复位寄存器GPIOx_BSRR





推荐阅读

史海拾趣

Daewoo公司的发展小趣事

随着金融危机的持续影响,Daewoo汽车公司最终未能幸免于难。2000年,大宇汽车公司宣告破产。然而,就在此时,美国通用汽车公司看到了Daewoo汽车公司的潜力和价值,决定对其进行收购。这一收购不仅为Daewoo汽车公司带来了新的生机,也使其能够借助通用汽车的技术和管理经验实现转型和升级。

Fujisoku Corporation公司的发展小趣事

随着全球化进程的加速,“未来电子”意识到单一市场已无法满足公司的长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,积极拓展国际市场。在欧洲、北美和亚洲等地,“未来电子”的产品和服务得到了广泛认可,市场份额逐年攀升。这一战略不仅提升了公司的国际影响力,还为公司的持续增长提供了强劲动力。

Carlo Gavazzi公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Carlo Gavazzi公司始终保持着创新的活力。公司不断推出新产品,从最初的电气元件到后来的控制和自动化解决方案,再到能源管理和节能方案,产品线日益丰富。这种多元化的产品策略不仅满足了客户的多样化需求,也为公司带来了更广阔的市场空间。

Hoffman Engineering公司的发展小趣事

在电子行业快速发展的背景下,Hoffman Engineering也面临着诸多市场挑战。为了应对这些挑战,公司不断进行战略调整和优化。例如,在市场竞争日益激烈的情况下,Hoffman Engineering加强了品牌建设和市场推广力度,提升了品牌知名度和市场影响力。同时,公司还注重与产业链上下游企业的合作与共赢,共同推动行业的健康发展。这些战略调整和优化措施的实施,使Hoffman Engineering在激烈的市场竞争中保持了稳健的发展态势。

FEI Microwave Inc公司的发展小趣事

随着环境问题日益严重,电子产品行业的可持续发展已经成为行业的重要趋势。FEI Microwave Inc公司积极响应这一趋势,将环保理念融入到产品研发和生产过程中。公司采用环保材料和绿色生产工艺,努力降低产品对环境的影响。同时,FEI Microwave Inc公司还积极推动废旧产品的回收和再利用工作,为电子行业的可持续发展贡献了自己的力量。

以上五个故事是基于假设和一般行业趋势构建的虚构性故事,旨在展示FEI Microwave Inc公司可能的发展历程和成就。在实际中,公司的发展历程和成就可能因市场环境、公司战略等因素而有所不同。

CYMBET公司的发展小趣事

随着全球环境问题的日益严重,环保和可持续发展已经成为电子行业的重要议题。CYMBET公司积极响应这一趋势,致力于环保和可持续发展。公司的EnerChip电池芯片采用环保材料制造,具有生物相容性,不会对环境造成污染。此外,CYMBET还积极探索绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。这种对环保和可持续发展的重视不仅体现了CYMBET的社会责任感,也为公司的可持续发展奠定了坚实的基础。

问答坊 | AI 解惑

数控机床的机械结构的要求

在数控机床发展的最初阶段,其机械结构与通用机床相比没有多大的变化,只是在自动变速、刀架和工作台自动转位和手柄操作等方面作些改变。随着数控技术的发展,考虑到它的控制方式和使用特点,才对机床的生产率、加工精度和寿命提出了更高的要求。数 ...…

查看全部问答>

谁能告诉我,电压比较器成本?

各位朋友,在制作各种电压检测的产品中,少不了电压取样和比较,常用的比较多,老板为了降成本,所以目前的电压比较器都不能用,(成本原因)要求比较器灵敏度在2mV以下,工作电流小于0.5mA以下,工作电压3-20V,要求成本不超过0.1元人民币,目前国 ...…

查看全部问答>

三极管问答

本帖最后由 paulhyde 于 2014-9-15 03:34 编辑 三极管问答 [ 本帖最后由 yushiqian 于 2009-8-15 23:33 编辑 ]    …

查看全部问答>

USB转并口

我的本子上只有usb口,想买个430的学习板,可是430的usb下载线太贵了!请问有没有可以用的usb转并口啊?…

查看全部问答>

高密度电源的工艺设计(看看什么叫牛!140mm*44mm*90mm做到5000W)

高密度电源的工艺设计(看看什么叫牛!140mm*44mm*90mm做到5000W)    在网上看到“斜阳古道”大哥发了篇“高密度电源的工艺设计”,看了之后简直是叹服!拿出来与大家分享。在网上找了半天也没找到原理图什么的, ...…

查看全部问答>

温度传感器出现的问题

最近公司里两台热辊里的温度传感器出现一个偏高(实测126℃),一个偏低(实测121℃),后来把两个温度传感器交换了一下,两个传感器都变成了123℃,可能是什么原因?温度传感器后面有个放大器。…

查看全部问答>

南通大富豪

海安团购网网站:http://www.haiantuangou.com/         www.8880513.com 亲爱的朋友,你还在喜欢玩斗地主吗,你还在玩那些没钱赚的网页斗地主吗,你也梦想有一天能日赚千元吗?只要有梦想,你就能实现,在这里我 ...…

查看全部问答>

AVR单片机问与答

来自维库人才网     问:我想使用AVR 单片机中的Mega 系列,有哪些开发工具支持这种单片机?   答AVR 单片机中的Mega 系列有一套完善的开发工具评估/编程板ATMEL 的 STK500(980 元/套)起步工具包是适用于开发Atmega103 芯片的对芯片 ...…

查看全部问答>

求,怎样在51中放置一串数据,掉电数据不丢失

在51单片机中放置一串十几字节的数据,掉电以后数据不丢失,上电以后可以再次读出这个数据, 请问这个数据放在哪里的呢? 怎样用C或者汇编来放这些数据呢? 还有就是怎样对它进行读写?…

查看全部问答>

关于Intel IPP库使用问题

大侠们好。 最近做有关MPEG4编解码的项目,用的是Intel PXA270处理器。现在发现编码程序的代码中 mp4emblk.c里ippiCopyBlock_8x8_8u和ippiReconBlock_8x8这两个函数不能够链接。也就是说Intel IPP库里面没有这两个函数。 我下的IPP版本是5.0的。 ...…

查看全部问答>