嵌入式软件--stm32 DAY 1
一、STM32概述
1.ARM内核
ARM是一家英国公司。后被日本软银收购。
RISC(精简指令集计算机)
产品:ARM架构处理器,相关外围组件的电路设计方案。
怎么卖 :知识产权授权 只卖方案不卖具体产品
买了如何用 拿到ARM的方案 设计产品 卖钱 分钱给ARM ARM躺着赚钱
ARM然后是处理器架构。几乎所有的移动端处理器均采用ARM授权方案设计
ARM处理器架构发展:
一个芯片就是一个计算机的架构。
补充:除了精简指令集,还有复杂指令集CISC,比如英特尔公司的X86.
2.STM32
ST公司设计的一系列以ARM Cortex-M为核心的32位微控制器。
STM32因其灵活性和强大的处理器被广泛应用。
3.命名规范
4.STM32开发方式
直接基于寄存器开发
优点:代码执行效率高 对硬件理解深入 有利于新手学习STM32知识 更换其他芯片上手快
缺点:开发效率低 代码移植不方便
基于标准库函数开发
优点: 相比寄存器开发效率提高 相比寄存器开发难度降低 相比寄存器开发移植容易
缺点相当致命,废弃!
基于HAL库函数开发
5.开发工具选择
(1)Keil MDK(老牌):
目前国内主流的单片机开发工具,历史悠久,调试功能强大,网上资料多。一款通用的IDE,兼容市面上大部分单片机。
代码编辑能力比较弱,代码联想功能贼差!关键是收费!!!
IAR(老牌):主流 兼容大多数单片机 代码编辑能力不好用 收费
(2)STM32CubeIDE(ST官方推出):
ST官方软件,对STM32开发相当友好。
免费!免费!免费!
(3)Clion(工具新星)
6.Keil MDK的下载和安装
(1)介绍
(2)下载
官方下载地址:Keil Product Downloads
之后无脑安装即可。安装目录与之前下载的51 keil区分开。
步骤我就不过多阐述,下面是大佬的分享链接,转载自csdn。
https://blog.csdn.net/2301_78660211/article/details/136633627?sharetype=blogdetail&sharerId=136633627&sharerefer=PC&sharesource=zx18831955136&sharefrom=from_linkhttps://blog.csdn.net/2301_78660211/article/details/136633627?sharetype=blogdetail&sharerId=136633627&sharerefer=PC&sharesource=zx18831955136&sharefrom=from_link
(3)Pack installer
Keil MDK 与前面学过的Keil C51不一样,并没有内置STM的MCU,所以需要手动安装。
下载芯片支持包(Keil提供):Arm Keil | Devices 根据自己使用的芯片型号下载对应的芯片支持包。
二、开发板
1.实物图
2.原理图
LED1 PA0
LED2 PA1
LED3 PA8
3.stm32最小系统
4.电源
采用3.3V电源供电。我们电路采用了两路供电。
一路是USB的TypeC供电, TypeC提供的是5V,使用芯片AMS1117把5V转成3.3V。
另一路是STLink下载器直接提供3.3V供电(下载器内部已经把5V转成了3.3V)。
MCU电源
USB供电转3.3V
MCU调试口
5.时钟
STM32提供了两路外部时钟:外部高速时钟和外部低速时钟。
6.复位
7.下载调试
三、STM32提前验证
1.安装烧写器驱动
连线烧写调试线
2.固件升级
下面是检验是否升级成功,只要出现debug。
3.烧写工具
无脑安装
如果缺失dll文件或者应用程序错误,就是dll文件缺失或损坏错误。
前往C盘的Windows文件夹下的SysWow64文件夹(电脑一般都是64位的),将缺失的dll填补进去。
四、案例(寄存器)
1.需求
点亮一个LED灯
2.硬件电路设计
LED1 PA0 黄 给低电平,灯亮
LED2 PA1 蓝
LED3 PA8 绿
3.架构
创建stm32文件夹
为stm32文件夹下创建01_led_register
继续创建两个文件夹
启动文件Start,
核心支持的文件必须得要的。
然后设备支持的文件
再点进去startup
这里的文件不是每个都要的。要知道stm23f10x系列太多了,要找到对应103系列的。手册里面是有启动文件选择标准的。
我们用大容量芯片,hd.s文件。这些文件都可以归入启动文件夹。
还有用户基本的文件,里面要有最基本的main.c文件。
在Keil里面创建项目
在01_led_register文件夹下创建文件名为led_register的项目。
打开keil,点击创建新项目,在下图位置创建。自己写文件名 led_register
然后需要做选择。找到103,找到ZE.
点击ok之后出现下图,我们现在不需要关掉即可。
我们的文件位置就会生成工程文件。双击即可打开。
然后KEIL工程里面需要自己添加一些文件
项目创建好了!
记住!写完程序后先点生成再点烧录。
4.编译器配置
这些用了标准库文件,我们的keil版本是有需求的。我们需要第五版编译器,这个可以添加。
添加完成。
在这里可以选择版本。
5.写代码
将编译码格式改UTF8,方便写中文注释能看清。
第一步开启时钟,要用的就开启,不用的就不用开。我们要点开LED灯。看原理图都是 PA0 PA1 PA8引脚,GPIOA时钟。
基地址0x4002 1000 偏移地址0x18
C语言中没有32位字符型,就强转为*(uint32_t *)
开启时钟,配置输出,输出低电平
#include <stdint.h>int main(void){//1.时钟配置,开启GPIOA时钟*(uint32_t *)(0x40021000+0x18)=4;//2.配置PA0 PA1为输出*(uint32_t *)(0x40010800+0x00)=0x33;//配置PA8为输出,根据数据手册8在高寄存器,偏移地址0x04*(uint32_t *)(0x40010800+0x04)=0x03;//PAO,PA1,PA8输出为低电平*(uint32_t *)(0x40010800+0x0C)=0xfefc;while(1){}}
经过一系列配置后便可以构建和烧写了。
黄灯就亮了。PA0代表的LED!