从上文可以看到,在系统启动过程中会对系统时钟进行一次配置,有了时钟源以后,我们来看简单的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--编写跑马灯
下一篇:STM32F4xx_GPIO常用设置
推荐阅读最新更新时间:2024-11-13 13:14
设计资源 培训 开发板 精华推荐
- 使用 MaxLinear, Inc 的 LP2950 的参考设计
- 使用 Analog Devices 的 LT1184CS 的参考设计
- MORPH-IC-II,开发模块完全向后兼容 MorphIC-1K FPGA 和用于中等规模生产的 USB-to-UART 模块
- 用于 16 位 ADC AD7701 的 ADR420 电压基准的典型应用
- 使用 STMicroelectronics 的 LM105 的参考设计
- LTM4636IY 1V、40A DC/DC 降压型稳压器的典型应用电路
- CRD-20DD09P-2、20kW 全桥谐振 LLC 转换器板可实现更小、更冷、成本更低的车载 EV 充电器
- 用于 16 位 ADC AD7701 的 ADR423 超精密、低噪声、3.00 Vout XFET 电压基准的典型应用
- 下推式磁悬浮_开源
- 使用 Aimtec 的 AM2M-0512D-NZ 的参考设计