目录
一、STM32F103VET6
二、创建工程
1.主要文件
2.生成文件
三、操作寄存器点灯
前言
这一年,从调剂到各种找工作面试、去实习,感受总结下来就是“出走半生,归来仍是萌新”,作为一个自动化爬了四年的学生,发现自己不管是对于基础的C、电路、模数电,到通信协议、RTOS、Linux,再到机器学习,都只是知道了解,但知道的不多这种程度,真是在面试要说出个一二的时候,多少有点困难。
为了巩固基础,买了块野火的32板子,这个笔记就作为记录,从点灯开始。
一、STM32F103VET6
Cortex-M3:ARM公司推出的基于ARMv7架构的32位Cortex-M3微控制器内核。
STM32:ST(意法半导体)公司就推出的基于Cortex-M3内核的MCU—STM32。
图1 STM32F103VET6命名规则
图2 STM32芯片结构
二、创建工程
1.主要文件
startup_stm32f10x_hd.s:stm32启动文件,汇编语言。
stm32f10x.h:库文件,存放寄存器映射代码。
main.c:主函数(mian.c(doge))
2.生成文件
文件夹 | 作用 |
DebugConfig | 用于存放调试设置信息文件(.dbgconf),不可删除 |
Listings | 用于存放编译过程产生的链接列表等文件 |
Objects | 用于存放编译过程产生的调试信息、.hex、预览、.lib文件等 |
三、操作寄存器点灯
根据目标GPIO,查询参考手册找到时钟寄存器、端口配置寄存器、数据输出寄存器的地址及其偏移量,通过位操作来改变寄存器状态,从而实现功能。
常用位操作:
把变量的首位,置1:|= (1<<0)
把变量的首位,置0:&= ~(1<<0)
把变量的首位,取反:^= (1<<0)
变量从首位开始的连续两位,置0:&= ~(3<<0)
例:a = 1110 1110(0xEE)后两位置0:
3<<0:0000 0011(0x03)
~(3<<0):1111 1100(0xFC)
a &= ~(3<<0):1110 1100(0xEC)
图3 LED原理图
根据LED原理图,将PB0置低电平即可使RGB灯绿色点亮。因此,根据顺序:
1、使能时钟:RCC时钟控制器属于AHB总线,首地址为0x4002 1000。因为需要配置的PB0属于APB2总线,则找到APB2 外设时钟使能寄存器(RCC_APB2ENR)的偏移地址为0x18,从而将0x4002 1018地址下第三位数据置1,打开PB0的时钟。
2、配置输入输出端口:端口操作前需要先配置它的模式。有端口配置低寄存器,负责低8位;端口配置高寄存器,负责高8位。要配置PB0,则去配置低8位寄存器GPIOB_CRL。控制GPIOB_CRL低位配置寄存器,地址为0x40010C00,偏移0x00,PB0通用推挽输出00,模式为输出01。
图4 GPIOB_CRL寄存器
在GPIOB_CRL中,每4位配置一个端口,则PB0配置为0-3位。
对于CNF:
在输入模式(MODE[1:0]=00):
00:模拟输入模式
01:浮空输入模式(复位后的状态)
10:上拉/下拉输入模式
11:保留
在输出模式(MODE[1:0]>00):
00:通用推挽输出模式
01:通用开漏输出模式
10:复用功能推挽输出模式
11:复用功能开漏输出模式
对MODE:
00:输入模式(复位后的状态)
01:输出模式,最大速度10MHz
10:输出模式,最大速度2MHz
11:输出模式,最大速度50MHz
3、配置输出数据端口:GPIOB基地址0X4001 0C00,GPIOB_ODR偏移量0x0C,PB0置0即对
0X4001 0C0C地址下的数据首位置0。
通过DAP下载到板上即可点亮RGB。三个步骤代码如下:
#include "stm32f10x.h"
int main(void)
{
*(unsigned int*)0x40021018 |= (1<<3);
//控制RCC寄存器打开时钟,RCC偏移0x18为APB2时钟,寄存器第三位为PB使能
*(unsigned int*)0x40010C00 |= ((1)<<(4*0));
//控制GPIOB_CRL低位配置寄存器,偏移0x00,PB0通用推挽输出00,模式为输出01
*(unsigned int*)0x40010C0C &= ~(1<<0);
//控制GPIOB_ODR输出数据寄存器,偏移0x0C,寄存器首位即PB0
}
参考
[野火®]STM32库开发实战指南——基于野火指南者开发板 — [野火]STM32库开发实战指南——基于野火指南者开发板 文档https://doc.embedfire.com/mcu/stm32/f103zhinanzhe/std/zh/latest/index.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)