1. STM32 环境搭建 + STM32 新建工程 + Yinyuer(ZCY) 的 STM32 寄存器首次点灯
STM32 环境搭建
安装 keil5
提取码:v2lp
注意:安装路径不能出现中文
下载安装芯片包
百度网盘
提取码:ot7h
提取码:di7e
官网下载
找到自己需要的型号
安装芯片包
注意:安装路径不能出现中文
STM32 新建工程
- 创建新工程
- 选择对应的芯片
- 在目录底下创建 main.c 文件,加入 main.c 文件
- 将启动文件复制到目录,添加启动文件
- 定义声明 SystemInit 函数
注意:main 函数最后一个大括号要空一行,否则会报错
- 编译
0 错误,0警告 good!!!
Yinyuer(ZCY) 的 STM32 寄存器首次点灯
一、看 STM32 原理图,找到 LED 灯 和 相关寄存器 参数
D1 直接接 GND,有电源,D1 就会亮
D2 接 GPIOC13 输出低电平,就能点亮
那么我们得让
- 启动控制 GPIOC13 的时钟
- 将 GPIOC13 配置成输出模式
- 让 GPIOC13 配置成低电平
1. 启动控制 GPIOC13 的时钟
看中文参考手册配置寄存器
找到 复位和时钟控制(RCC) 对应的 起始地址
时钟 的起始地址:0x4002 1000
由于是 APB2 管,我们也要找到 APB2 外设时钟使能寄存器的偏移地址
APB2 外设时钟使能寄存器的偏移地址:0x18
时钟起始地址 + APB2外设时钟使能寄存器的偏移地址 = 控制GPIOC13的时钟的寄存器地址
0x4002 1000 + 0x18 = 0x4002 1018
如何打开呢?在中文参考手册继续参考
GPIOC13 C时钟 置 1 开启
*(unsigned int *)0x40021018 |= 0x01 << 4 //左移4位
* (unsigned int* ) :(unsigned int*)是一个强制类型转换,首先把指针强制转换成(unsigned int*)型,然后再取值。
2. 将 GPIOC13 配置成输出模式
起始地址:0x4001 1000
偏移地址:0x04
0x4001 1000 + 0x04 = 0x4001 1004
设置成 推挽输出 以及 输出模式 设置最大为10MHz:
*(unsigned int*)0x40011004 |= 0x01 << 20 //左移20位
3. 让 GPIOC13 引脚输出低电平
0x0c
0x4001 1000 + 0x0c = 0x4001 100c
*(unsigned int*)0x4001100c &= ~(0x01 << 13)//左移13位
想把位变成1用或运算
想把位变成0用与运算
二、整合代码
void SystemInit()//防止系统报错
{
}
int main()
{
//1.使能 GPIOC 的时钟
* (unsigned int *)0x40021018 |= 0x01 << 4;
//2.配置 GPIOC13 为输出模式 0x4001 1000 + 0x04
* (unsigned int *)0x40011004 |= 0x01 << 20;
//3.配置GPIOC13 输出低电平 0x4001 1000 + 0Ch
* (unsigned int *)0x4001100c &=~ (0x01 << 13);
}
三、烧写程序
- 生成 .hex 文件
- 烧写 .hex 文件进 STM32
百度网盘下载:
提取码:z0by
事先安装好 usb—tll 的驱动
连接好 USB TO TTL 和 STM32
TXD——PA10
RXD——PA9
将 STM32 上的键帽,置 1
选择 DTR的高电平复位,RTS高电平进BootLoader 点击编程,按 STM32 上的 REST 键
四、点灯成功
复位 STM32 上的键帽,置 0