历史上的今天
今天是: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








上一篇:STM32F407--编写跑马灯
史海拾趣
|
在数控机床发展的最初阶段,其机械结构与通用机床相比没有多大的变化,只是在自动变速、刀架和工作台自动转位和手柄操作等方面作些改变。随着数控技术的发展,考虑到它的控制方式和使用特点,才对机床的生产率、加工精度和寿命提出了更高的要求。数 ...… 查看全部问答> |
|
各位朋友,在制作各种电压检测的产品中,少不了电压取样和比较,常用的比较多,老板为了降成本,所以目前的电压比较器都不能用,(成本原因)要求比较器灵敏度在2mV以下,工作电流小于0.5mA以下,工作电压3-20V,要求成本不超过0.1元人民币,目前国 ...… 查看全部问答> |
|
高密度电源的工艺设计(看看什么叫牛!140mm*44mm*90mm做到5000W) 高密度电源的工艺设计(看看什么叫牛!140mm*44mm*90mm做到5000W) 在网上看到“斜阳古道”大哥发了篇“高密度电源的工艺设计”,看了之后简直是叹服!拿出来与大家分享。在网上找了半天也没找到原理图什么的, ...… 查看全部问答> |
|
最近公司里两台热辊里的温度传感器出现一个偏高(实测126℃),一个偏低(实测121℃),后来把两个温度传感器交换了一下,两个传感器都变成了123℃,可能是什么原因?温度传感器后面有个放大器。… 查看全部问答> |
|
在51单片机中放置一串十几字节的数据,掉电以后数据不丢失,上电以后可以再次读出这个数据, 请问这个数据放在哪里的呢? 怎样用C或者汇编来放这些数据呢? 还有就是怎样对它进行读写?… 查看全部问答> |
|
大侠们好。 最近做有关MPEG4编解码的项目,用的是Intel PXA270处理器。现在发现编码程序的代码中 mp4emblk.c里ippiCopyBlock_8x8_8u和ippiReconBlock_8x8这两个函数不能够链接。也就是说Intel IPP库里面没有这两个函数。 我下的IPP版本是5.0的。 ...… 查看全部问答> |




