目录
什么是STM32?
该怎么学STM32?
个人实践案例
总结
1.概述
在准备学习STM32之前,得知道什么是STM32,大家翻阅资料都知道STM32是意法半导体(STMicroelectronics)公司推出的一系列32位基于ARM Cortex-M内核的微控制器。它具有低功耗、高性能和丰富的外设资源,被广泛应用于工业控制、智能家居、汽车电子、消费电子等领域。STM32系列微控制器提供了不同的型号和系列,以满足不同应用场景的需求。
2.优势
相比于51单片机,STM32的优势在哪?51单片机是8位构架,而STM32具有32位构架,有着更高的计算能力和更大的地址空间,可以处理更复杂的任务和更大规模的应用。
更丰富的外设资源:STM32微控制器集成了更多的外设资源,如高速串行通信接口、模拟数字转换器、定时器、PWM输出等。这使得STM32更适合处理复杂的通信、计时和控制任务。
更高的性能:由于32位架构和更先进的内核设计,STM32微控制器具有更快的时钟速度和指令执行速度。这使得STM32可以更快地处理计算任务和实时应用。
多核心支持:一些STM32系列(如STM32F4和STM32H7系列)支持多核心处理器,也就意味着可以同时运行多个任务,提高系统的并行处理能力。
低功耗设计:STM32微控制器采用了先进的低功耗技术和智能省电模式,可以有效降低系统功耗,延长电池寿命。
更多的开发资源和生态系统支持:STM32系列微控制器拥有庞大的开发者社区和广泛的生态系统支持,提供了丰富的开发工具、软件库和技术支持,帮助开发者快速进行产品开发和调试。
虽然51单片机在某些特定场景下可能仍然有优势,但总体上来说,STM32微控制器在性能、功能和可扩展性方面都更加出色,适用于更广泛的应用领域。
1. 学习基础知识:了解STM32微控制器的基本原理、体系结构和外设资源。可以阅读相关的资料、参考手册和官方文档,建立起对STM32的基本认识和理解。那么在网上,有很多关于STM32的资料可以供大家翻阅。
2. 选择开发板:当我们对于STM32有着一些了解之后,我们可以选择入手一块开发板,那么有动手能力的,我觉得可以自己来做一块开发板。
3.安装编程环境:STM32主要使用C语言进行开发,还可选择使用其他的高级编程语言或者图形化编程工具。熟悉并选择使用适合的集成开发环境(IDE),如Keil uVision、IAR Embedded Workbench、STM32CubeIDE等。(我是用的Keil uVision来编程开发的)
4.实践:那么当我们开发板和开发环境都准备好以后,我们可以选择来通过一些案例来进行学习,可以从LED闪烁、串口通信、蜂鸣器控制等基础项目开始,逐渐扩展到更复杂的应用,如电机控制、传感器数据采集等。
那么说了那么多主要是想让大家对于STM32有着大概的了解,本人也是刚学习的STM32,时间不长,有什么说的不对的,希望大家可以在评论下面纠正一下。
给大家分享一下我最近做的一个小案例啊
首先打开我们的Keil uVision编程软件,打开我们做好的案例。
我这个案列是为了实现当我们按下开发板上的按键之后,LED亮,然后在串口输出LED亮或者闪烁的文本。
首先我们要给LED初始化
在led.h的工程文件下
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#define LED0 PEout(5) // PE5
#define LED1 PBout(5) // PB5
void LED_Init(void);//初始化
#endif
给我们开发板上的管脚进行一个定义
定义完之后,在led.c工程文件下编写
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB, ENABLE); //使能PE,PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PE5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //根据设定参数初始化GPIOE.5
GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PB5 端口配置, 推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB5 输出高
}
这边主要是调用了库函数,刚开始学的STM32我觉得是先从学会调用库函数开始。
那么LED的配置好了之后,接下来轮到我们的按键
在key.h工程文件下编写
#ifndef __KEY_H
#define __KEY_H
#include "sys.h"
#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键1
#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)//读取按键2
void KEY_Init(void);//IO 初始化
#endif
这里也是给我们的按键初始化,然后在key.c工程文件下编写
#include "key.h"
#include "delay.h"
//按键初始化函数
//PA15 和 PC5 设置成输入
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//使能 PORTE 时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//PE4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化 GPIOE.4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PE3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化 GPIOE.3
}
那么这里的按键配置也是完成了的,接下来看看我们的主函数
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
int main(void)
{
delay_init(); //延迟函数初始化
LED_Init(); //初始化与LED连接的硬件接口
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组2
uart_init(9600); //串口初始化为9600
KEY_Init(); //初始化与按键连接的硬件接口
LED0=1;
LED1=1;
while(1)
{
if(KEY0==0)
{
LED0=0;
printf("LED0亮\r\n");
delay_ms(300);
}
if(KEY0==1)
{
LED0=1;
delay_ms(300);
}
if(KEY1==0)
{
LED1=!LED1;
delay_ms(500);
LED1=!LED1;
delay_ms(500);
printf("LED1闪烁\r\n");
}
}
}
都编写好之后我们先编译一下
编译没出错那么我们下载到我们的开发板看一下有没有实现功能
可以看到成功实现了功能嗷!
那么如果说刚入门的可以通过调用库函数来进行一个实践案例进行学习,那么去了解库函数我觉得对于学习STM32上来讲还是有很大的帮助的。