本人刚开始学习32,今天使用了寄存器点亮了开发板上的第一盏灯,记录下学习过程。
材料
stm32f103c8t6开发板
ST-link V2烧录器(STlink接线和keil的配置)
杜邦线
1.新建工程
new project,我这里命名为first-led
根据stm32信号选芯片,我这里是stm32f103c8
点击ok后出现下面界面直接点击×
2.搭建工程环境
在文件中创建main.c文件夹,并双击Source Group1添加至工程
编译
出现上面错误是因为没有添加启动文件
启动文件下载
提取码: u9i7
下载好后放入至文件夹中,并双击Source Group1添加至工程中,stm32f10x.h是自己创建,并在main函数中添加#include “stm32f10x.h”
如下图:
再次编译
还是有错
声明函数SystemInit();
编译成功。
3.编写代码
查看原理图
要点亮灯D2,将PC13输出低电平即可。
配置PC13输出低电平
详细步骤
1.使能GPIOC的时钟
2.配置GPIOC13为输出模式
3.配置GPIOC13输出低电平
为什么要使能GPIOC的时钟呢?因为默认GPIOC时钟是关闭的,不使能就无法进行下面的操作。就比如时钟是人的心脏,心脏停止了,就没必要后续的操作了。
如何使能GPIOC的时钟
首先找到复位时钟的起始地址:0x40021000
找到APB2的偏移地址: 0x18 。为什么找APB2外设时钟而不是APB1呢?因为GPIOC是挂载在APB2高速总线上的。
基地址 + 偏移地址
即:0x40021000 + 0x18 = 0x40021018
这是APB2外设时钟的地址
端口C在第四位,配置第四位为1即可打开C时钟。
即:0x40021018 |= 0x01 << 4;
这里:
|=
: 置位
&=~
: 清零
如何配置PC13 为输出模式呢
这里要在数据手册中找到端口配置高寄存器的地址了,端口有16个I/O,我们要配置的13属于高寄存器。(0-7为低,8-15为高)
同样要找到GPIOC_CRH寄存器的地址
起始地址 + 偏移地址: 0x40011000 + 0x04 = 0x40011004
这里选择推挽输出模式,速度为10HZ,即将第四位配置为0001,后左移20位即可将PC13配置成输出模式
即 : 0x40011004 |= 0x01<<20;
如何配置PC13 输出低电平呢
同样,得找到端口输出寄存器(GPIOC_ODR)的地址,也是起始地址 + 偏移地址 。
起始地址 + 偏移地址即为:0x40011000 + 0Ch = 0x4001100C
这是GPIOC_ODR寄存器的地址,要配置第13位为0即可输出低电平0x4001100C &= ~(0x01<<13)
4 烧录查看结果
完整代码
#include "stm32f10x.h"
void SystemInit()
{
}
int main(void)
{
*(unsigned int *)0x40021018 |= 0x01 << 4;
*(unsigned int *)0x40011004 |= 0x01 <<20;
*(unsigned int *)0x4001100C &= ~(0x01<<13);
//unsigned int *强转为地址,然后*去内容
}
D2成功点亮。
32的学习道路遥远艰巨,157集大型连续剧刷起!加油不放弃。每一个程序员都是在不断地修改错误中成长的。