当前位置:   article > 正文

STM32F407VET6开发 | 学习笔记Day1

stm32f407vet6

目录

一、初识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.代码实现
  1. #include "stm32f4xx.h" // Device header
  2. /***********************************
  3. *功能:毫秒粗略计时器
  4. *参数:
  5. * ms:给定毫秒
  6. *返回值:无
  7. *其他:
  8. ************************************/
  9. void delay_ms(uint32_t ms)
  10. {
  11. int i;
  12. for( i = 0; i < (ms*10000) ; i++)
  13. {
  14. __NOP();
  15. }
  16. }
  17. /***********************************
  18. *功能:LED灯初始化
  19. *参数:无
  20. *返回值:无
  21. *其他:
  22. * PE8 ---- LED1
  23. * PE9 ---- LED2
  24. * PE10 --- LED3
  25. ************************************/
  26. void LED_Init(void)
  27. {
  28. /***1.开启时钟***/
  29. RCC->AHB1ENR |= 0x01 << 4;
  30. /***2.配置GPIO***/
  31. GPIOE->MODER &= ~(0x03 << 16); //将16、17位数据清零
  32. GPIOE->MODER |= (0x01 << 16); //模式:输出
  33. GPIOE->ODR |= 0x01 << 8; //初始化为灯灭
  34. GPIOE->MODER &= ~(0x03 << 18); //将18、19位数据清零
  35. GPIOE->MODER |= (0x01 << 18); //模式:输出
  36. GPIOE->ODR |= 0x01 << 9; //初始化为灯灭
  37. GPIOE->MODER &= ~(0x03 << 20); //将20、21位数据清零
  38. GPIOE->MODER |= (0x01 << 20); //模式:输出
  39. GPIOE->ODR |= 0x01 << 10; //初始化为灯灭
  40. }
  41. int main(void)
  42. {
  43. LED_Init(); //初始化
  44. while(1)
  45. {
  46. GPIOE->ODR &= ~(0x01 << 8); //LED1亮灯
  47. GPIOE->ODR |= 0x01 << 10; //LED3灯灭
  48. GPIOE->ODR |= 0x01 << 9; //LED2灯灭
  49. delay_ms(300);
  50. GPIOE->ODR &= ~(0x01 << 9); //LED2亮灯
  51. GPIOE->ODR |= 0x01 << 10; //LED3灯灭
  52. GPIOE->ODR |= 0x01 << 8; //LED1灯灭
  53. delay_ms(300);
  54. GPIOE->ODR &= ~(0x01 << 10); //LED3亮灯
  55. GPIOE->ODR |= 0x01 << 9; //LED2灯灭
  56. GPIOE->ODR |= 0x01 << 8; //LED1灯灭
  57. delay_ms(300);
  58. }
  59. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/713357
推荐阅读
相关标签
  

闽ICP备14008679号