STM32F407学习笔记二(GPIO)

发布者:chenxiaohong68最新更新时间:2021-02-05 来源: eefocus关键字:STM32F407  gpio  寄存器 手机看文章 扫描二维码
随时随地手机看文章

从上文可以看到,在系统启动过程中会对系统时钟进行一次配置,有了时钟源以后,我们来看简单的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





关键字:STM32F407  gpio  寄存器 引用地址:STM32F407学习笔记二(GPIO)

上一篇:STM32F407--编写跑马灯
下一篇:STM32F4xx_GPIO常用设置

推荐阅读最新更新时间:2024-11-13 13:14

汇编入门学习笔记 (一)—— 基础知识、寄存器
疯狂的暑假学习之 汇编入门学习笔记 (一) 参考:《汇编语言》 王爽 第一,二章 一、基础知识 1. 用汇编语言编写程序的工作过程 汇编本质就是为了方便程序员,把二进制代码用汇编指令来表示 汇编指令---------------- 编译器 ---------------- 机器码---------------- 计算机执行 mov ax, bx 100010001 ................ ............... 2. 汇编语言的组成
[单片机]
LPC1788---串口设置
LPC1788学习之串口学习-寄存器操作 接收数据使用中断接收---发送暂时是直接发送--简单的寄存器操作-记下不忘记! #include uart_lpc1788.h uint32_t Receive_Sign; //接收数据下标--接收数据个数 uint8_t Receive_Buf ; //接收数组 /*-----------------------串口0初始化------------------*/ void Uart0_Init(uint32_t clk, uint32_t baudrate) { uint32_t tmp; uint16_t divisorInt; LPC_IOCON-
[单片机]
STM32F4关于DMA传输向GPIO口的开发
本文章是经历了大量时间,试验,阅读文档,上网搜索无果,再读文档。最后,睡觉时做了一个梦,在梦中,对文档从头到尾再过了一遍,第二天早上醒来,按照梦中的指示,做了些许修改,一次出结果的。 希望此文能够帮助到国内还在此问题上困扰的人们。 说到STM32的DMA,其实大家都已经很熟悉了。DMA的例子网上也是到处都有。在F1的开发中,DMA需要设置的就是这些内容了,理解上很容易。 主要就是: 1.设置通道 2.设置源地址和目标地址 3.设置buffer长度 4.设置方向 5.设置模式 6.设置各地址的自增特性 7.设置传输字长 8.设置搬运模式,单次,循环 9.设置优先级 在F4上还增加了设置
[单片机]
STM32F4关于DMA传输向<font color='red'>GPIO</font>口的开发
STM32F407的ADC单次转换
用到的引脚是PA3也就是ADC1的通道3 1、ADC的主要参数 a、分辨率----stm32f407的分辨率有6位、8位、10位、12位,参考电压如果是3.3 那么最小分辨率就是3.3/4095。 b、转换时间----stm32f407的最高允许频率是36M,最快转换时间 = 3+12个周期 =0.71us。 c、参考电压----2.4至3.3v。 2、工作过程分析 ADC转换是把外面输入到引脚的电压值转换成数字信号,单片机里面有一个模拟至数字的转换模块,我们可以控制它采集引脚的电压,stm32F407可以利用void ADC_SoftwareStartConv(ADC_TypeDef* ADCx)这个函数来控制转换。 3、详
[单片机]
<font color='red'>STM32F407</font>的ADC单次转换
MCS51单片机的定时器/计数器概念 非常好的寄存器关系图
一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令
[单片机]
STM32F407上移植emwin
环境: 主机:WIN8 开发环境:MDK5.13 emwin版本:STemWinLibrary522 mcu: stm32f407VGT6 开发板:安富莱STM32-X3 TFT型号:艾蓝2.8寸TFT,主控芯片:ILI9325 说明: 在STM32F407上移植emwin,驱动屏幕接口为FSMC 移植步骤: 1.MDK新建文件结构: 2.GUIConf.c文件修改 a)增加宏定义: #define GUI_NUMBYTES (1024 * 80) #define GUI_BLOCKSIZE 0x80 b)GUI_X_Config(void)函数中增加语句
[单片机]
<font color='red'>STM32F407</font>上移植emwin
s3c2440 ARM9 裸机驱动第一篇-GPIO驱动(汇编)
一 开发环境: 1.ubuntu 2.JZ2440开发板 二 硬件部分 JZ2440开发板上将GPF4-7四个引脚外接LED,从电路图可以得知,IO口为低电平时LED灯亮。 查询s3c2440 数据数据手册,GPF引脚寄存器地址如下: 三 软件部分: led.s .text .global _start _start: ldr r0 ,= 0x53000000 @WATCHDOG ADD mov r1 ,#0x0 str r1 , @r1 的数据写入r0 ldr r0 ,=0x56000050 @GPFCON mov r1
[单片机]
s3c2440 ARM9 裸机驱动第一篇-<font color='red'>GPIO</font>驱动(汇编)
arm学习笔记二(arm寻址方式)
工作状态 arm状态 32位指令 thumb状态 16位指令 存储器的格式 最大寻址空间为4gb 大端格式:字数据的高字节存储在低地址中,低字节存放在高地址中 小端格式:与大端格式相反 axd查看寄存器 ================================================================= arm寻址方式(貌似计算机原理中学过) 处理器根据指令中给出的地址信息来寻找物理地址的方式 立即寻址 立即数寻址 示例代码如下: add r0,r0,#1; r0 --r0+1 add r0,r0,#0x3f; r0 --r0+0x3f 以十六进制表示的立即数要加0x或& 寄存器寻址 利用寄存器中的
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved