Stm32_1

目录

1.认识stm32单片机

2.开发环境安装

1.开发环境

2.单片机开发模式

3.创建工程的方式

[4. 烧录STM32程序](#4. 烧录STM32程序)

3.基本GPIO控制

1.GPIO基础知识

2.系统架构

[3. IO八种工作模式](#3. IO八种工作模式)

[1、STM32 IO工作模式](#1、STM32 IO工作模式)

1.推挽输出(Push-Pull,pp)

2.开漏输出(Open-Drain,OD)

[3.复用推挽/开漏输出(Alternate Funtion,AF)](#3.复用推挽/开漏输出(Alternate Funtion,AF))

[1.上拉输入(Input Pull-up)](#1.上拉输入(Input Pull-up))

[2.下拉输入(Input Pull-down)](#2.下拉输入(Input Pull-down))

[3.浮空输入(Floating Input)](#3.浮空输入(Floating Input))

[4.模拟输入(Analoge mode)](#4.模拟输入(Analoge mode))

2、GPIO的输出速度

4.固件库实现LED点灯


1.认识stm32单片机

STM32是单片机,它由意法半导体制造。ST是意法半导体的简称,M指的是微控制器(MCU),也就是MCU的第一个英文。32指的是32位的CPU,它的CPU是采用 ARM公司的Cortex-m系列的内核设计。

学习STM32单片机可以访问两个官网,一个是意法半导体官网和STM32系列单片机的官网,其中Cortex-M后面的数字越大性能越好。

以STM32F103C8T6为例:

stm32是家族名,还有stm8,32和8的区别就是CPU处理数据的位数不一样,而且32采 用的是ARM公司的Cortex-M系列的内核,8是意法半导体自主研发的CPU内核。

F指的是产品类别,它是属于基础型,还有汽车A级,超低功耗L等类型。

103这三个数字是指特点的功能,它指STM32的基础型,还有051入门级等等。

C指的是STM32的引脚数量,不同的大写字母代表的不同的引脚数,C代表48引脚。

8是指STM32的闪存(flash)大小,也就是放代码空间的大小,8指闪存大小是 64KB。

T指的是芯片的封装形式QFP。

6指的是芯片的工作环境的温度-40°到+85°。

2.开发环境安装

1.开发环境

1.安装MDK(keil)

Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。 目前软件对中文的支持不友好,不建议安装网上的一些汉化包之类的。另外建立 的工程文件路径也尽量不要存在中文,否则可能会出现一些异常。

2.安装芯片包stm32f1xx

3.网络连接的表达方式

用连线表示两个器件有连接

用网络标号来表示两根期间有连接

2.单片机开发模式

1.汇编操作寄存器。执行效率高。编写难度大,移植性差。

2.使用C语言操作寄存器。 执行效率适中。编写效率低,移植性差。

3.使用库开发

  • 标准库,执行效率稍低,但是编写效率高,移植性稍高

标准库是ST公司最早发布的固件库,对STM32芯片进行了完整的封装,覆盖了对 应的外设的所有功能。它的缺点就是,它是针对某款STM32型号设计的,可移植性差,例如,F1系列的库和F4系列的库是不同的,但是在F1系列中还是可以通用的。

  • HAL库,执行效率稍低,但是编写效率高,移植性好

HAL库是近几年官方极力推荐的库,覆盖了全系列的芯片,可以说HAL库就是用 来取代标准库的,相对标准库,HAL库有着更高的抽象、整合水平,它的API更多 的集中关注在外设的公共函数功能,HAL库的移植性好,它在STM32中的通用性很强。

3.创建工程的方式

创建工程方式有两种:使用Keil创建工程模板、 使用STM32CubeMX

新建一个工程:

1.新建一个文件夹,添加文件:

  • DOC工程说明:doc说明文档
  • Libraries固件库:cmsis内核文件;FWLIB外设文件;start_up启动文件
  • Project工程文件:keil工程
  • User应用程序:应用程序

2.Keil里面新建文件

  • START_UP 启动文件
  • USER 应用程序
  • CMSIS 内核配置相关文件
  • DOC 说明文档
  • FWLIB 外设相关配置

4. 烧录STM32程序

1.使用flymcu串口烧录

  • 首先安装串口驱动

2.使用jlink、stlink烧录工具在线烧录

  • 安装stlink/jlink驱动
  • 配置魔术棒勾选然后烧录

3.基本GPIO控制

1.GPIO基础知识

GPIO(General-Purpose input/output,通用输入/输出接口)

用于感知外部信号(输入模式)和控制外部设备(输出模式)

  • 简单模块:LED,按键,蜂鸣器,温度传感器,使用一个GPIO就可以完成数据的传输/ 控制
  • 复杂一点的模块OLED,FLASH,六轴传感器需要多个引脚组成"协议"传输数据, USART,IIC,SPI等协议
  • MCU单片机大都采用引脚复用模式也就是一个GPIO,可以直接控制它输出高低电 平,也可以设置为某个协议的引脚之一。此外,一些MCU的引脚,还能设置为ADC模 式读取模拟信号,或者设置为DAC模式输出模拟信号

2.系统架构

3. IO八种工作模式

GPIO结构图

1、STM32 IO工作模式

输出模式有四种:推挽输出,开漏输出,复用开漏,复用推挽

输入模式有四种:上拉输入,下拉输入,浮空输入,模拟输入

输出模式:

1.推挽输出(Push-Pull,pp)

让输出控制变成了VDD/VSS输出,使得输出电流增大

提高了输出引脚的驱动能力,提高了电路的负载能力和开关的动作速度

2.开漏输出(Open-Drain,OD)

推挽输出模式可以直接输出高电平,开漏输出需要外接上拉电阻才能输出高电平

开漏输出的特性:

  • 利用外部电路驱动能力
  • 实现电平转换
  • 方便实现"逻辑与" 功能
3.复用推挽/开漏输出(Alternate Funtion,AF)

GPIO除了作为通用输入输出引脚使用以外,还可以作为片上外设(USART,IIC,SPI) 专用引脚,即一个引脚可以有多种用途,但是同一时刻一个引脚只能使用复用功能中的一个

当引脚设置为复用功能的时候,可选择推挽复用模式或者复用开漏模式,在设置为复用开漏模式时,需要外接上拉电阻。

输入模式

1.上拉输入(Input Pull-up)

VDD经过开关、上拉电阻,连接外部I/O引脚。当开关闭合时,外部I/O输入信号时,默认输入高电平。

2.下拉输入(Input Pull-down)

VSS经过开关,下拉电阻,连接外部I/O引脚,当开关闭合时,外部I/O无输入信号 时,默认输入低电平。

3.浮空输入(Floating Input)

两个上下拉电阻开关均断开,没有上拉也没有下拉,I/O引脚直接连接TTL肖特基触发器

此时,I/O引脚浮空,读取的电平是不确定的,外部信号是什么电平,MCU引脚就输 入什么电平

MCU复位上电后,默认为浮空输入模式

4.模拟输入(Analoge mode)

两个上下拉电阻开关均断开,同事TTL肖特基触发器也断开,引脚信号直接连接模拟输入,实现对外部信号的采集。

2、GPIO的输出速度

STM32的I/O引脚工作再输出模式下时,需要配置I/O引脚的输出速度

该输出速度不是输出信号的速度,而是I/O口驱动电路的响应速度。

STM32提供了三个速度,2MHZ,10MHZ,50MHZ 。实际开发过程中需要结合实际情况选择合适的响应速度,以兼顾信号的稳定性和低功耗

  • 当设备为高速时,功耗大,噪声大,电磁干扰强
  • 当设备为低速时,功耗低,噪声小,电磁干扰弱

简单外设,比如LED灯,蜂鸣器建议使用2MHZ的输出速度

而复用为IIC,SPI等通信信号时,建议使用10MHZ或50MHZ以提高响应速度。

4.固件库实现LED点灯

1.LED灯

LED灯,是一种能够将电能转化为可见光的半导体期间

原理:当给P极施加正向电压时,空穴和自由电子在P-N结复合,辐射出光子而发光。

2.控制LED灯

LED灯的正极接到了3.3V,LED灯的负极接到了PA1,也就是GPIOA1引脚

只需要控制PA1为相对应的低电平,即可点亮对饮的LED灯,输出高电平则熄灭对应的LED 灯。

使用到的固件库

GPIO结构体:

typedef struct

{

uint16_t GPIO_Pin; //GPIO引脚

GPIOSpeed_TypeDef GPIO_Speed; //GPIO输出速度

GPIOMode_TypeDef GPIO_Mode;

}GPIO_InitTypeDef;

软件设计流程

1.初始化系统

  • 初始化GPIO外设时钟
  • 初始化LED引脚

2.输出电平

cs 复制代码
#include "stm32f10x.h"
#include "main.h"
#include "led.h"


void delay(uint16_t time)//延时1ms
1ms
{
	uint16_t i = 0;
	while(time --)
	{
		i = 12000;
		while(i --);
	}
}

int  main()
{
	//初始化GPIOA1
	led_init();

   while(1)
	 {

			GPIO_ResetBits(GPIOA,GPIO_Pin_1);//A1输出低电平,灯亮了
			delay(1000);
			GPIO_SetBits(GPIOA,GPIO_Pin_1);
			delay(1000);
		 
	 }
		 
   
}

 

注:

1.resetbits为输出低电平

2.烧录后,需要按开发版的复位键

3.该软件延时主要就是让CPU"空转",通过计算不同指令周期的时间,参考CPU主频大小,大概算出延时时间,这种方法从表面看起来就不精确,但它是比较好实现:

相关推荐
国科安芯13 小时前
商业航天级抗辐照MCU与电源芯片在硅微条探测器系统中的应用分析
单片机·嵌入式硬件·架构·安全威胁分析·安全性测试
Molesidy1 天前
【Embedded Development】【bootloader】基于MCU的bootloader详细介绍以及基于MCU串口的IAP实战详细教程
单片机·嵌入式硬件·bootloader
长安第一美人1 天前
php出现zend_mm_heap corrupted 或者Segment fault
开发语言·嵌入式硬件·php·zmq·工业应用开发
沐欣工作室_lvyiyi1 天前
基于单片机的两轮自平衡循迹小车(论文+源码)
单片机·嵌入式硬件·小车·两轮自平衡
清风6666661 天前
基于单片机的8路抢答器设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
点灯小铭1 天前
基于单片机的智能污水有害气体电子鼻检测系统
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
SystickInt1 天前
32 DMA实现ROM与RAM通信
stm32·单片机·嵌入式硬件
俊昭喜喜里1 天前
STM32开发板电源设计( DCDC 电路和 LDO 电路 )
stm32·单片机·嵌入式硬件
m0_555762901 天前
方案再再对比
单片机