初识STM32:寄存器编程 × 库函数编程 × 开发环境

STM32的编程模型

假如使用C语言的方式写了一段程序,这段程序首先会被烧录到芯片当中(Flash存储器中),Flash存储器中的程序会逐条的进入CPU里面去执行。

CPU相当于人的一个大脑,虽然能执行运算和执行指令,但不能去做一些具体的任务(比如大脑想看到某样东西,它需要眼睛;想要说话,就需要嘴巴)。对于CPU同理,想要完成某个具体的功能,就需要借助CPU周围的一些模块(模块负责执行一些具体的任务)。

故程序的目的就是控制CPU周围的模块,去执行一些具体的功能。


寄存器和寄存器编程

寄存器:由若干个比特位组成,读写这些比特位可以控制这些模块。CPU通过控制寄存器,来操控这些模块,从而来实现具体功能。

想对芯片周围的这些模块进行编程(使用模块),就需要操作模块的寄存器组,直接去读写操作寄存器的代码,为寄存器编程。

假设CPU周围有一个模块,叫做GPIO,可以管理芯片周围的16个引脚。其模块内部有寄存器组,包含两个寄存器:输入寄存器(IDR)和输出寄存器(ODR),均有16个比特位,对应GPIO所管理的16个引脚。则可对其进行寄存器编程:

cpp 复制代码
int main()
{
    GPIO->ODR = 0xFFFF; //所以引脚输出高电平
    GPIO->ODR = 0x0000; //所有引脚输出低电平
    GPIO->ODR |= 0x01;  //1号引脚输出高电平
    GPIO->ODR &= ~0x01; //1号引脚输出低电平
}

这种寄存器的编程方式比较繁琐。


库函数编程

将操作寄存器的代码包装成一条条函数,在实际编程中,直接调用这些包装好的函数来控制寄存器。

标准库:由ST官方提供的库,对寄存器的简单封装。

如下所示,为库函数编程:

cpp 复制代码
void GPIO_Init(...);
void GPIO_Write(...);
void GPIO_WriteBit(...);
void GPIO_SetBits(...);
void GPIO_ResetBits(...);

int main()
{
    GPIO_Write(...,0xFFFF); //所以引脚输出高电平
    GPIO_Write(...,0x0000); //所以引脚输出低电平
    GPIO_WriteBit(...,1,1); //1号引脚输出高电平
    GPIO_WriteBit(...,1,0); //1号引脚输出低电平
}

安装DFP

即安装器件支持包,因为现在的ARM的芯片型号非常多,升级换代速度也快,新型号的芯片也是不断推出,而Keil5软件不能出一款芯片就升级一下软件,而且同时支持所有型号的芯片。

Keil5之后,芯片的器件支持包就被独立出来了,开发哪种芯片安装对应支持包就行了。若没有安装支持包,在新建工程时,是不会出现相应的器件型号。


安装ARMCC编译器

虽然Keil5是集成开发环境,具备编译器的功能。但我们的标准库是一个比较古老的库,对于新版的Keil5软件来说,不支持标准库的编译,需要安装一个旧版的编译器,即ARMCC编译器,来让我们的标准库能够在Keil5软件上跑起来。

可在软件中查看是否安装ARMCC:


安装STLINK驱动

由ST公司设计的一种硬件的调试器,负责将我们的电脑与嵌入式硬件连接起来,调试器在中间负责通信,这样我们可以通过电脑去控制单片机运行,从而查看程序是否达标或存在BUG。

安装驱动一般流程:

先将STLINK插在电脑上,然后在设备管理器中可以看到STLINK在"其他设备"的列表上。如果其图标带有感叹号,就说明电脑上目前没有安装STLINK驱动(反之则已经安装过STLINK驱动)。

STLINK驱动如下所示:

安装成功后,可在"通用串行总线设备"里看到STM32 STLINK。


相关推荐
2401_827501287 小时前
51单片机(二):GPIO、中断、定时器与PWM
单片机·嵌入式硬件·51单片机
尼喃9 小时前
HDMI/DP高速差分接口ESD保护:0.3pF超低电容PWESD-5VSDF方案详解
嵌入式硬件
ACP广源盛139246256739 小时前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件
Saniffer_SH10 小时前
NAND技术(二):从 Channel、Die/LUN、P/E Cycle 到 LDPC,一次讲透 NAND 里那些最容易误解的概念
人工智能·驱动开发·嵌入式硬件·测试工具·fpga开发·计算机外设·压力测试
辰哥单片机设计11 小时前
STM32音乐播放器
stm32·单片机·嵌入式硬件
周洲083012 小时前
STM32 串口指令控制系统|上位机下发命令控制 LED、继电器,通用指令解析框架
stm32·嵌入式硬件·mongodb
集芯微电科技有限公司12 小时前
PC3100H 专为TFT-LCD面板偏置电源设计双输出100m电流
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
广州灵眸科技有限公司13 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 系统操作-线进程操作
数据库·单片机·嵌入式硬件·算法·php
集芯微电科技有限公司14 小时前
各种大小尺寸TFT-LCD面板供电偏压电源方案IC
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
FREEDOM_X14 小时前
嵌入式——定时器工作原理
linux·c语言·单片机·嵌入式硬件·ubuntu