STM32初探


设置堆栈 初始化环境

添加头文件

选择正确的型号(点开魔法棒)

时钟

控制外设使能与否就是控制这个外设的时钟

以LED为例

  • 查看原理图

  • 查看总线架构

  • 找到RCC(复位和时钟控制) 基地址
    • 基地址:0x4002 3800

  • 接着找到RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR)
    • 得到 偏移地址:0x30

RCC_AHB1ENR的地址就为基地址 + 偏移地址 其他以此类推

  • AHB1 外设时钟使能寄存器 使能

推挽模式 寄存器操作 控制时钟

配置寄存器进行相应的模式配置

通过端口配置表(表28)配置相应的位配置不同的模式

再次展示我们的原理图

注:

点击查看详细配置内容

OT0 OT1 分别对应GPIO端口0 端口1 以此类推

(输出速度越快 功耗越大 这里的速度指的是GPIO电平翻转的速度 就是高低电平变化的速度)

/*
	使用寄存器的方法点亮LED灯
  */
#include "stm32f4xx.h" 


/**
  *   主函数
  */
int main(void)
{	
	/*开启 GPIOH 时钟,使用外设时都要先开启它的时钟*/
	RCC_AHB1ENR |= (1<<7);	
	
	/* LED 端口初始化 */
	
	/*GPIOH MODER10清空*/
	GPIOH_MODER  &= ~( 0x03<< (2*10));	
	/*PH10 MODER10 = 01b 输出模式*/
	GPIOH_MODER |= (1<<2*10);
	
	/*GPIOH OTYPER10清空*/
	GPIOH_OTYPER &= ~(1<<1*10);
	/*PH10 OTYPER10 = 0b 推挽模式*/
	GPIOH_OTYPER |= (0<<1*10);
	
	/*GPIOH OSPEEDR10清空*/
	GPIOH_OSPEEDR &= ~(0x03<<2*10);
	/*PH10 OSPEEDR10 = 0b 速率2MHz*/
	GPIOH_OSPEEDR |= (0<<2*10);
	
	/*GPIOH PUPDR10清空*/
	GPIOH_PUPDR &= ~(0x03<<2*10);
	/*PH10 PUPDR10 = 01b 上拉模式*/
	GPIOH_PUPDR |= (1<<2*10);
	
	/*PH10 BSRR寄存器的 BR10置1,使引脚输出低电平*/
	GPIOH_BSRR |= (1<<16<<10);
	
	/*PH10 BSRR寄存器的 BS10置1,使引脚输出高电平*/
	//GPIOH_BSRR |= (1<<10);

	while(1);

}

// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void)
{	
}

文章作者: 周master
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 周master !
  目录