STM32F407VET6开发 | 学习笔记Day1
目录
学习参考视频: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);
}
}
更多推荐

















所有评论(0)