STM32开发

article/2025/8/26 1:44:06

ST意法半导体生产的32位MCU(微控制器)

  1. 硬件

  1. NB-loT通信扣板:SMA天线,NB86-G通信模块,STM32F0主控芯片,外部晶振

  1. 一键还原底板:供电电路,LED指示灯,电源开关,五向按键,复位按键,USB串口(Mini USB)

  1. LCD扣板:128*128像素的16位彩色LCD 屏幕

  1. 锂电池(蓝色串口线使用USB接口进行充电)

  1. USB数据线(蓝色):充电,查看串口打印

  1. ST-link:烧写器,将程序和数据烧写到芯片内部的Flash中,调试。

  1. 烧写器转接板

  1. 开发环境

  1. Keil MDKv5:uVision IDE,调试器,编译器,中间件(函数库),设备软件包。

注意:1.安装路径中不要出现空格或者中文字符。

2.使用管理员运行安装程序。

3. 对于STMF0系列的处理器商业和非商业使用免费,对其他系列处理器非商业使用免费(社区版)社区版注册:MDK-Community edition

4. 芯片软件包(Keil.STM32F0xx_DFP.2.1.1.pack):

下载:MDK5 Device List (keil.com),双击安装,安装路径中不要有中文字符。

5. ST-Link烧写器驱动(STSW_LINK009_V2.0.1.zip):

1. 驱动下载:https://www.st.com/en/development-tools/st-link-v2.html

2. 先解压缩,双击(dpinst_amd64.exe)安装

3. 安装成功后,连接ST-Link硬件,可以在设备管理器中看到对应设备

6.安装补丁:解决MDK5.38版本使用ST-Link闪退问题,MDK uVision crashes when using ST-Linkdebugger (arm.com),将压缩包内的dll文件复制到keil安装目录中的ARM\STLink目录下,覆盖同名文件。

7. STM32CubeMX工具:生成工程框架和初始化代码。

1. 下载:https://www.st.com/en/development-tools/stm32cubemx.html

2. 安装:安装路径中不能出现中文字符。

芯片型号:STM32F051K8U6

芯片资料:

  1. 英文官网:www.st.com

  1. 中文社区:www.stmcu.org.cn

点灯

验证开发环境和硬件是否能够正常工作。

MDK5.38只支持ARMCC版本6编译器,需要修改工程编译器版本

while(1)
{//开灯HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET);HAL_Delay(500);//关灯HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET);HAL_Delay(500);
}

工程目录说明:

  1. IOC文件:

STM32CubeMX的工程文件,CubeMX中配置数据保存在此文件中。

2.MDK-ARM目录:

  1. MDK工程文件:扩展名uvprojx

  1. 芯片启动代码:startup_stm32f051x8.s

  1. DebugConfig:调试配置信息

  1. 以工程命名的目录:编译生成的文件

  1. RTE:工程使用的组件配置

  1. CRF文件:代码跳转使用

  1. AXF文件:编译生成的可执行文件(ELF)

  1. SCT文件:分散加载描述文件(连接器,_main函数)

3.Core目录:

  1. Inc:用户的头文件

  1. src:用户的源代码

  1. mian.c:存放main函数

  1. stm32f0xx_it.c:存放中断处理函数

  1. stm32f0xx_hal_msp.c:存放板级初始化代码

4.Drivers目录:

  1. CMSIS:Common Microcontroller Software Interface Standard,定义芯片级的函数接口(函数名,类型,寄存器定义)

  1. STM32F0xx_HAL_Driver: STM32的固件库。

四种开发方式:

  1. 直接操作寄存器

  1. 标准外设库

  1. HAL库

  1. LL库

优化工程占用磁盘空间

芯片手册

  1. 选型手册(Selection Guide)

  1. 数据手册(data sheet)

  1. 参考手册(Reference Manual)

  1. 编程手册(Programming manual):指令集,CPU寄存器,CPU核心外设

  1. 勘误表(Errata sheet):芯片的已知问题和规避方法。

  1. 应用手册

芯片启动流程

  1. 当BOOT0引脚为低电平时,将芯片内部的Flash映射到0地址,CPU直接从Flash芯片取指令运行。

  1. 当BOOT0和BOOT1引脚都为搞电平时,将芯片内部的ROM映射到0地址,CPU执行ROM中预先烧录的代码。(串口下载)

  1. 当BOOT0为高电平,BOOT1低电平,将芯片内部的RAM映射到0地址,CPU从RAM中取指令运行。

CPU启动后从0地址获取栈顶指针,从Flash的第4个字节取指令运行。

程序默认栈大小1024字节。

使用STM32CubeMX修改堆和栈空间大小。

  1. CPU执行的第一个函数Reset_Handler

  1. Reset_Handler调用SystemInit函数

  1. Reset_Handler调用_main函数,根据分散加载文件将数据从Flash复制到RAM中。

  1. _main调用用户的main函数

STM32F0是基于ARM Cortex-M0系列的处理器,使用Thumb指令集,不是ARM指令集。

MX前缀的函数是根据CubeMX中的配置生成的函数。

STM32中一个GPIO控制器可以控制16个引脚。

GPIO控制器原理图

  1. GPIO输出模式

推挽(Push Pull):既可以输出高电平,也可以输出低电平

开漏(Open Drain):只能输出低电平,不能输出高电平(i²c)

处理器运行模式

处理模式Handler:不使用操作系统时,都运行在此模式下,使用MSP(R13)保存栈顶地址。

线程模式Thread:使用操作系统时,任务运行在此模式下,中断处理函数运行在Handler模式下,使用PSP(R13)保存栈顶地址。

注意:在CubeMX生成的文件中,修改代码必须放在“USER CODE BEGIN”和“USER CODE END”注释中间,否则重新生成代码时会被CubeMX删除。

GPIO输出

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin, GPIO_PinState PinState);
//参数1:GPIO控制器寄存器组的起始地址
//参数2:控制引脚的掩码
//参数3:输出电平
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET);
延时函数
void HAL_Delay(uint32_t Delay);
//参数:延时时间,单位毫秒

设置MDK编辑器支持中文

时钟树配置

STM32芯片内部集成了时钟振荡电路(阻容式RC)

F051K8芯片内部有3个时钟源:低速内部LSI(40KHz),高速内部HSI(8MHz),HSI14(14MHz)

阻容式振荡电路精度不高并且容易受外部温度的影响,造成时钟周期变化,一般只在芯片上电或外部时钟源失效时使用。

在系统运行过程中,使用外部晶振作为时钟源,精度更高。

启用外部时钟源(高速外部HSE):

设置CPU的运行频率为48MHZ

生成代码时,CubeMX会将时钟树配置生成到SystemClock_config()函数中。

系统定时器(SysTick)

HAL库的延时函数默认使用系统定时器实现。

  1. SystemClock_Config()函数在配置完时钟树之后,根据CPU主频配置系统定时器,每毫秒发送一次中断到CPU。

  1. 每次调用系统定时器中断处理函数SysTick_Handler(),将全局变量uwTick的值加1,因此此变量中记录的是系统启动后经过的时间(单位毫秒)

  1. HAL_Delay()函数中获取当前时间与调用起始时间相减,如果小于等待时间就执行空循环,否则退出循环完成延时操作。

串口的使用

发送数据

HAL_StatusTypeDef
HAL_UART_Transmit(UART_HandleTypeDef
*huart, uint8_t *pData, uint16_t Size,
uint32_t Timeout);
//参数1:串口控制器的句柄(对象)
//参数2:发送数据的起始地址
//参数3:发送数据长度
//参数4:发送超时时间(单位毫秒),不超时
(HAL_MAX_DELAY)
//返回值:
HAL_OK         成功
HAL_ERROR      失败
HAL_BUSY       上次发送未完成
HAL_TIMEOUT    发送超时
//向串口发送OK和换行,不超时
HAL_UART_Transmit(&huart1,(uint8_t*)"OK\r\n", 4, HAL_MAX_DELAY);

接收数据

HAL_StatusTypeDef
HAL_UART_Receive(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size, uint32_t Timeout);

使用标准IO函数

  1. 定义fputc()和fgetc()函数,重定向标准输出和输入到串口1,fputc函数由printf函数自动调用,fgetc()函数由scanf函数自动调用。

//将标准输出重定向到串口1
int fputc(int c, FILE* fp)
{if (fp == stdout){HAL_UART_Transmit(&huart1,(uint8_t*)&c, 1, HAL_MAX_DELAY);}return c;
} 
//将标准输入重定向到串口1
int fgetc(FILE* fp)
{uint8_t c = EOF;if (fp == stdin){//如果没读到数据,返回EOFif (HAL_UART_Receive(&huart1, &c, 1,100) != HAL_OK){return EOF;}}return c;
}
  1. 包含标准IO头文件

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
  1. 在main函数中调用标准IO函数输出字符串到串口1,从串口1读取字符串并回显。

/* Initialize all configured peripherals*/
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
//向串口1发送数据
puts("OK");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */while (1)
{char line[80] = {0};if (fgets(line, sizeof line, stdin) != NULL){printf("%s", line);} 
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
} 
/* USER CODE END 3 */
  1. 链接C语言标准库


http://chatgpt.dhexx.cn/article/ISY5ih4Y.shtml

相关文章

在 keil 建立基于STM32开发的工程模板--详细步骤

手把手教你在keil建立STM32的工程模板 1 先说几句1.1 什么是STM32&#xff1f;1.2 什么是cortex?1.3 什么是ARM&#xff1f;1.4 什么是意法半导体&#xff1f; 2 硬件平台2.1 STM32103C8T6最小系统板2.2 电源供电2.3 时钟电路2.4 复位电路2.5 调试和下载电路 3 建立工程模板3.…

STM32开发方式及基本介绍

相关推荐STM32新建一个工程 STM32的开发有三种方式 1.寄存器版本 2.库函数版本 3.HAL库版本 一、库函数开发与寄存器开发的关系 很多人都是从学51单片机转而想进一步学习STM32&#xff0c;他们习惯了51单片机的寄存器开发方式&#xff0c;ST官方库摆在面前会不知道从何下手…

基于STM32开发板的循迹小车设计

STM32的简单应用之循迹小车 前言 智能寻迹基于自动引导机器人系统&#xff0c;可以实现小车自动识别路线。智能寻迹小车运用传感器、单片机、电机驱动及自动控制等技术实现&#xff0c;管理时自动寻迹导航。该技术已经应用于无人驾驶机动车、无人工厂、仓库、服务机器人等多种…

STM32应用开发实践教程:初识STM32

1.1.1 什么是 STM32 1&#xff0e;STM32 概述 STM32 微控制器是意法半导体&#xff08;ST Microelectronics&#xff0c;ST&#xff09;有限公司出品的一系列微控制 器&#xff08;Micro Controller Unit&#xff0c;MCU&#xff09;的统称。 意法半导体有限公司于 1987 年 6 月…

STM32开发指导

思考 如果我们要自己开发一个蓝牙温湿度计,硬件最小系统和外设都有什么?软件逻辑是什么? 需求分析 ● 采集类传感器使用火焰传感器、温湿度传感器、光照传感器中任意一种。 ● 黄色LED模拟智能灯,可以采集到灯状态并可远程控制;五向按键作为灯控开关(家居本地控制)。…

《嵌入式-STM32开发指南》第一部分 入门篇 -第1章 学嵌入式从STM32开始

1.1 STM32简介 ARM公司简介 ARM是Advanced RISC Machines的缩写,它是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的RISC (精简指令集)处理器。公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务…

STM32的四种开发方式

STM32的四种开发方式 首先看下ST官方给出的四种开发方式的比较 寄存器开发 寄存器编程对于从51等等芯片过渡过来的小伙伴并不陌生&#xff0c;不管你是什么库&#xff0c;最终操作的还是寄存器&#xff0c;所以对于标准库、HAL库、LL库都是在寄存器上的编程&#xff0c;所以可…

使用STM32固件库开发GD32 汇总

文章目录 GD32与STM32异同1. 相同点2. 外围硬件区别3. 内部结构差别4. 功耗区别(以128k以下容量的作为参考)5. 内部FLASH 区别 使用STM32库开发时钟配置区别1. 晶振起振区别描述解决方法 2. 部分客户使用有源晶振出现问题&#xff0c;在 GD32F103 小容量产品&#xff0c;发现会…

STM32开发必备知识篇:STM32的运行机制

时间飞逝&#xff0c;转眼间已经硕士毕业工作第四年了&#xff0c;嵌入式研发成长道路上曲折坎坷&#xff0c;所以这也是我今年撰写博客的初心&#xff0c;即分享技术积累和研发经验&#xff0c;目前主要分为STM32和FPGA两个专辑&#xff0c;都包括开发必备知识篇和实战项目例程…

如何评判STM32各个MCU的性能?

很多人说STM32性能太弱&#xff0c;那你了解这个性能是如何得出来的吗&#xff1f; 1写在前面 我们经常听见某手机发布会&#xff0c;安兔兔跑分多少多少&#xff0c;其实这个跑分就是体现手机性能的一个指标。 我们使用STM32开发产品&#xff0c;选择MCU时&#xff0c;一般会综…

STM32各系列MCU性能对比及测试说明

置顶/星标公众号&#xff0c;不错过每一条消息&#xff01; 很多人说STM32性能太弱&#xff0c;那你了解这个性能是如何得出来的吗&#xff1f; 1写在前面 我们经常听见某手机发布会&#xff0c;安兔兔跑分多少多少&#xff0c;其实这个跑分就是体现手机性能的一个指标。 我们使…

win xp虚拟机

做嵌入式&#xff0c;用的ADS版本太老了&#xff0c;在xp系统上更方便&#xff0c;所以昨天装了一个。 其实我是一个搬运工&#xff0c;主要参考了另一个人的步骤:点击打开链接 只是第一次让输序列号的时候跳过去了。 要镜像可以留邮箱&#xff0c;好像不能直接放在这里&…

VMware虚拟机装windows xp系统

一.准备安装所需要的软件&#xff1a; 1.VMware虚拟机的下载。 首先下载&#xff1a;VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版 2.XP的系统软件。 二.在VMware虚拟机为创建新的虚拟机 1.打开虚拟机&#xff0c;选择新建虚拟机&#xff1a; 2.下一步&#xff1a;…

Windows xp,Windows2003虚拟机部署(各2台)

文章目录 ISO镜像下载winxp部署a.安装winxp虚拟机b.优化虚拟机c.做快照 Windows 2003a.安装win2003b.优化c.快照 克隆虚拟机(以win2003为例&#xff09; ISO镜像下载 ISO镜像下载链接 例&#xff1a;下载win10的操作系统 点击操作系统&#xff0c;选择要下载的镜像&#xff0…

VirtualBox 7.0.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件

VirtualBox 7.0.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件 Oracle VM VirtualBox 7 请访问原文链接&#xff1a;https://sysin.org/blog/virtualbox-7/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2022 年 10 月…

虚拟机VMware安装XP系统错误解决办法

虚拟机给我的编程工作确实带了很多方便&#xff0c;但是虚拟机的一个最大挑战是硬件赶不上&#xff0c;速度太慢了。最近一直在致力于虚拟机上Win7专业版平台上SQL Server 2005Visual Studio 2012系统开发&#xff0c;最初还可以&#xff0c;但是越到后面速度越慢。最后决定重新…

VM虚拟机安装Windows XP Professional

文章目录 安装XP下载img镜像安装激活安装VM-Tools 参考 安装XP 下载img镜像 在MSDN安装原版系统镜像-img文件&#xff0c;地址https://msdn.itellyou.cn/ 安装激活 新建虚拟机&#xff0c;选择img镜像文件&#xff0c;开启虚拟机&#xff0c;提交注册码安装即可。 安装VM-Tool…

Win10 虚拟机安装 Windows xp(professional sp3)简记(非教学)

实验系统需使用 VB6.0&#xff0c;任务较为复杂&#xff0c;win10下的vb6.0兼容问题较大。考虑win10 虚拟机安装winxp&#xff0c;部分重点记录如下&#xff1a;&#xff08;资料源于网络&#xff09; 虚拟机采用开源的 Oracle VM VirtualBox&#xff0c;&#xff08;Vmware也可…

VirtualBox 免费高效开源虚拟机软件(在XP下装Linux在、Ubuntu下装Vista等)

说起虚拟机软件&#xff0c;相信大家都会知道VMWare和 微软的Virtual PC 了。今天异次元给大家介绍的是另外一款轻量级的虚拟机软件Virtual Box。它原本是由德国的Innotek公司开发的&#xff0c;后来被Sun收购了。不过呢&#xff0c;它从出生到现在被收购&#xff0c;还是一直保…

VirtualBox虚拟机安装Windows XP

Ubuntu&#xff1a;VirtualBox虚拟机安装Windows XP 2011-03-15 14:58:45 标签&#xff1a; ubuntu vbox Windows xp 虚拟机 文件共享 原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://…