目录

一、初识STM32

 1.什么是嵌入式系统?

2.后续学习

3.ARM

4.STM32

5.工作开发流程

二、 工程模板的创建

1.新建文件

2.选择芯片类型

3.选择配置文件

4.创建main.c

5.添加宏定义

三、GPIO工作方式

1.概述

2.GPIO工作模式

四、LED流水灯(寄存器方式)

1.原理图

2.RCC AHB1外设时钟

3.GPIO寄存器

4.代码实现


学习参考视频https://www.bilibili.com/video/BV1az4y1V7wZ?p=1&vd_source=0f33f4f6b8d714703917aed6c33dcbd0

一、初识STM32

 1.什么是嵌入式系统?

嵌入式系统是以应用为中心,计算机技术为基础,软硬件可裁剪的计算机系统。

2.后续学习

FreeRTOS(M系列)和Linux操作系统(A系列)。

3.ARM

ARM是一家公司,ARM架构是一种精简指令集计算机架构,

Cortex-A系列:面向高性能应用,例如手机、平板。

Cortex-R系列:实时应用,军工、汽车。

Cortex-M系列:低功耗嵌入式系统,物联网设备、智能家居。

4.STM32

STM32是ST(意法半导体)公司退出的一系列基于ARM Cortex-M内核的产品系列。

寄存器开发:代码执行效率高,开发效率较低。

库函数开发:

        1.标准库:成熟稳定。

        2.HAL库:实现跨平台,界面编程,屏蔽硬件底层。

        3.LL库:更加接近底层的库。

SOC外设(GPIO、UART、IIC、SPI...)

5.工作开发流程

1.需求分析:硬件平台要求、外部接口、性能要求等。

2.架构设计:模块划分、接口设计、数据流、控制流等。

3.软件开发:编写代码、编译、调试等。

4.集成测试:各个模块进行集成和综合测试。

5.系统验证与调试:功能验证、性能测试、兼容性测试等。

6.优化与调试:进行性能优化和调试。

7.部署和发布:将软件部署到目标设备上,并进行发布。

8.维护和升级:修复漏洞、添加新功能。

二、 工程模板的创建

1.新建文件


2.选择芯片类型


3.选择配置文件


4.创建main.c


5.添加宏定义

最后,再次编译零报错零警告。


三、GPIO工作方式

1.概述

STM32F407有7组IO,每组IO有16个IO口,144个,注意STM32F407VET6只有100个。

2.GPIO工作模式

浮空输入:引脚悬空时电平不确定。

上拉输入:引脚悬空时默认高电平。

下拉输入:引脚悬空时默认低电平。

模拟输入:引脚直接接入ADC。

开漏输出:高电平为高阻态,低电平接VSS。

推挽输出:高电平接VDD,低电平接VSS。

复用开漏输出:由片上外设控制,高电平为高阻态,低电平接VSS。

复用推挽输出:由片上外设控制,高电平接VDD,低电平接VSS。

4种模式:输入、输出、复用、模拟。

4种输出速度:2MHZ(低速)、25MHZ(中速)、50MHZ(快速)、100MHZ(高速)

四、LED流水灯(寄存器方式)

1.原理图


2.RCC AHB1外设时钟


3.GPIO寄存器


4.代码实现
#include "stm32f4xx.h"                  // Device header

/***********************************
*功能:毫秒粗略计时器
*参数:
*	ms:给定毫秒
*返回值:无
*其他:
************************************/
void delay_ms(uint32_t ms)
{
	int i;
	for( i = 0; i < (ms*10000) ; i++)
	{
		__NOP();
	}
}

/***********************************
*功能:LED灯初始化
*参数:无
*返回值:无
*其他:
*	PE8 ---- LED1
*	PE9 ---- LED2
*	PE10 --- LED3
************************************/
void LED_Init(void)
{
	/***1.开启时钟***/
	RCC->AHB1ENR |= 0x01 << 4;
	/***2.配置GPIO***/
	GPIOE->MODER &= ~(0x03 << 16);   //将16、17位数据清零
	GPIOE->MODER |= (0x01 << 16); 	//模式:输出
	GPIOE->ODR |= 0x01 << 8;		//初始化为灯灭
	
	GPIOE->MODER &= ~(0x03 << 18);   //将18、19位数据清零
	GPIOE->MODER |= (0x01 << 18); 	//模式:输出
	GPIOE->ODR |= 0x01 << 9;		//初始化为灯灭
	
	GPIOE->MODER &= ~(0x03 << 20);   //将20、21位数据清零
	GPIOE->MODER |= (0x01 << 20); 	//模式:输出
	GPIOE->ODR |= 0x01 << 10;		//初始化为灯灭
}

int main(void)
{
	LED_Init();						//初始化
	
    while(1)
    {
		GPIOE->ODR &= ~(0x01 << 8);		//LED1亮灯
		GPIOE->ODR |= 0x01 << 10;		//LED3灯灭
		GPIOE->ODR |= 0x01 << 9;		//LED2灯灭
		delay_ms(300);
		GPIOE->ODR &= ~(0x01 << 9);		//LED2亮灯
		GPIOE->ODR |= 0x01 << 10;		//LED3灯灭
		GPIOE->ODR |= 0x01 << 8;		//LED1灯灭
		delay_ms(300);
		GPIOE->ODR &= ~(0x01 << 10);	//LED3亮灯
		GPIOE->ODR |= 0x01 << 9;		//LED2灯灭
		GPIOE->ODR |= 0x01 << 8;		//LED1灯灭
		delay_ms(300);
    }

}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐