C/C++ stm32基础知识超详细讲解(系统性学习day14)

简介: C/C++ stm32基础知识超详细讲解(系统性学习day14)

前言

stm32的广泛含义及背景:

STM32是一款由意法半导体(ST)公司开发的32位微控制器,其全称是意法半导体32位系列微控制器芯片。STM32是基于Cortex-M内核的32位单片机,分为多个系列以满足不同应用场景的需求。

STM32微控制器是将微型计算机的主要部分集成在一个芯片上的单芯片微型计算机,其诞生于20世纪70年代中期,经过多年的发展,其成本越来越低,性能越来越强大,应用已经无处不在,遍及各个领域。

STM32系列是ST公司专为要求高性能、低成本、低功耗的嵌入式应用设计的ARMCortex-M3内核的32位单片机。STM32有很多系列,从内核上分有Cortex-M0、M3、M4和M7等几种,每个内核又大概分为主流、高性能和低功耗等不同类型。其中STM32F系列有多个子系列,如STM32F103“增强型”系列、STM32F101“基本型”系列、STM32F105和STM32F107“互联型”系列等。


一、ARM和STM32是什么?

(1)什么ARM?

       1,ARM是一家公司名字------专门做IP核------依靠专利授权盈利

       2,ARM是一系列基于ARM内核设计的芯片的代称

(2)ARM内核的分类?

       ARM7,ARM9,ARM11

       Cortex-A      主要应用于计算量比较大,有交互性界面的领域  ------电视机,手机,平板,投影仪,车载中控

       Cortex-R      主要应用实时性要求比较高的领域-----航空航天,汽车刹车

       Cortex-M      主要用于微控制器(MCU)领域

(3)什么STM32?

       单片机

       它是ARM Cortex-M3的芯片

       我们学习的芯片全称:

           STM32F103RCT6

           STM32F407ZET6

         

(4)STM32F103RCT6的含义

       ST:意法半导体公司

       M:MCU

       32:32bit的CPU一次性处理数据的多少

       F103:编号

       R:引脚数量 pin  64pin

       C:flash的大小----256KB  注意:flash的大小和启动文件的选择有关系

       T:封装

       6:温度等级

二、STM32的开发方式

       常用的为以下四种开发方式:

     (1) 寄存器开发:寄存器----具有特殊功能的内存单元------寄存器开发是所有可编程逻辑芯 片所支持的一种开发方式

      (2)标准外设库开发:ST公司不再维护这种开发方式

      (3)Cube库开发:STM32CubeMX图形化界面的软件-----目前这种开发方式有两个缺点:   一,只支持ST公司的芯片,二代码冗余特别多

      (4)LL库开发:不成熟

开发方式大比拼:

开发方式 开发难度 可维护性 代码可执行效率
寄存器开发 最难 最低  最高
标准外设库开发 适中 适中 适中
Cube库开发 最简单 最高 最低
LL库开发 较难 较低 较高

芯片里面有什么?

(1)内核  ----CPU

(2)片上外设:外设位于芯片的内部,内核的外部

       (片外外设:外设位于芯片的外部)

       单片机的开发实质:和内核沟通,利用片上外设驱动片外外设

       

       补充:

           Cortex-M3的内核是哈弗架构:数据和指令是分开存储的

                            冯若依曼架构:数据和指令是不分开的

三、GPIO----寄存器开发方式

1.八种输入输出模式分析

        组件的作用:

        施密特触发器----纠正电平

       上拉电阻:一个电阻,一端接到电源正极,一端接到信号线,这个电阻称为这根信号线上的上拉电阻-----如果信号线没有其他输入,上拉电阻无压降

       下拉电阻:一个电阻,一端接到电源负,一端接到信号线,这个电阻称为这根信号线上的下拉电阻

       八种输入输出模式:

       (1)输入浮空:  没有上拉电阻,没有下拉电阻

                   输入0:  输入数据寄存器中的值为0

                   输入1:  输入数据寄存器中的值为1

                   没有输入时: 输入数据寄存器中的值为上一次状态或者是复位值

       (2)输入上拉:  有上拉电阻,没有下拉电阻

                   输入0:  输入数据寄存器中的值为0

                   输入1:  输入数据寄存器中的值为1

                   没有输入时: 输入数据寄存器中的值为1

       (3)输入下拉:  没有上拉电阻,有下拉电阻

                   输入0:  输入数据寄存器中的值为0

                   输入1:  输入数据寄存器中的值为1

                   没有输入时: 输入数据寄存器中的值为0    

      (4)模拟输入:(是专门为ADC这个片上外设准备的模式)    ,不经过施密特触发器,没有上拉电阻,也没有下拉电阻

                   电压从芯片的引脚进来后直接输入到ADC片上外设,由ADC片上外设处理

                   ADC的作用:用于读取电压值;当需要读不是0v或3.3v之外的电压值时使用

                   

       (5)推挽输出: 输出数据寄存器写0: 对应引脚输出低电平0V            

                  输出数据寄存器写1: 对应引脚输出高电平3.3V

                 

       (6)开漏输出:不能输出高电平

                  输出数据寄存器写0: 对应引脚输出低电平0V            

                  输出数据寄存器写1: 对应引脚输出高阻

                 

       复用:引脚受片上外设控制

       通用:引脚受CM3控制的输出数据寄存器控制

       

       (7)复用推挽输出: 片上外设的输出数据寄存器写0: 对应引脚输出低电平0V            

                      片上外设的输出数据寄存器写1: 对应引脚输出高电平3.3V

                 

       (8)复用开漏输出:不能输出高电平

                  片上外设的输出数据寄存器写0: 对应引脚输出低电平0V            

                  片上外设的输出数据寄存器写1: 对应引脚输出高阻    

2.寄存器

(1)

      最大速度:电平翻转的速度

       f(频率)=1/T(周期)

       f(单位是HZ)

       T(单位是s)

(2)

      将寄存器reg的第n位清零:  reg  &=~(1<<n);

      将寄存器reg的第n位置1:   reg  |=(1<<n);    

       判断寄存器reg的第n位为0还是为1

       if(reg&(1<<n)){

           reg的第n位为1;

       }else{

           reg的第n位为0;

       }

(3)

       如果点亮红色的灯

       1,配置GPIOC的CRH寄存器的第3---0位配置成0010

       2,配置GPIOC的ODR寄存器的第8位配置成0

四、stm32芯片图片

五、怎么学好stm32

学好STM32需要掌握以下基本技能和步骤:

  1. 熟练掌握C语言:STM32开发的核心语言是C语言,因此熟练掌握C语言是学好STM32开发的基础。
  2. 学习并掌握一种开发环境:常见的STM32开发环境有Keil、IAR等,选择适合自己的开发环境,并熟练掌握其使用方法。
  3. 学习并掌握一种调试工具:常用的调试工具包括JTAG、SWD等,熟练掌握这些调试工具的使用方法,可以帮助你更好地调试代码。
  4. 学习库函数和寄存器:STM32的库函数和寄存器是实现其功能的关键,因此需要深入学习并理解库函数和寄存器的使用方法。
  5. 学习基本外设和高级功能:STM32有许多基本外设和高级功能,如GPIO、定时器、串口、SPI、IIC、WDG、FSMC、ADC/DAC等,需要了解并掌握这些外设和功能的基本原理和使用方法。
  6. 系统学习:可以通过购买开发板、开发板配套视频教程、开发板配套源码和芯片官方手册进行系统学习。同时,要善于利用网络资源,如论坛、博客等,进行学习交流。
  7. 多实践、多动手:学习STM32开发不能只停留在理论层面,需要多动手实践,编写代码、调试程序,从实践中学习和积累经验。
  8. 注重学习方法:学习STM32开发需要注重学习方法,例如如何查找资料、如何提问、如何解决问题等。要学会独立思考和解决问题,避免过度依赖他人。

总之,学好STM32需要付出努力和时间,需要掌握基本技能和知识,同时注重实践和学习方法,不断提高自己的编程和调试能力。


总结

关于C/C++ stm32基础知识的超详细讲解,懒大王就先分享到这里了,如果你认为这篇文章对你有帮助,请给懒大王点个赞点个关注吧,如果发现什么问题,欢迎评论区留言!!💕💕 💕

相关文章
|
2月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
49 0
|
11天前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
13 3
|
2月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
2月前
|
Rust 安全 C++
系统编程的未来之战:Rust能否撼动C++的王座?
【8月更文挑战第31天】Rust与C++:现代系统编程的新选择。C++长期主导系统编程,但内存安全问题频发。Rust以安全性为核心,通过所有权和生命周期概念避免内存泄漏和野指针等问题。Rust在编译时确保内存安全,简化并发编程,其生态系统虽不及C++成熟,但发展迅速,为现代系统编程提供了新选择。未来有望看到更多Rust驱动的系统级应用。
46 1
|
16天前
|
存储 传感器 Linux
STM32微控制器为何不适合运行Linux系统的分析
总的来说,虽然技术上可能存在某些特殊情况下将Linux移植到高端STM32微控制器上的可能性,但从资源、性能、成本和应用场景等多个方面考虑,STM32微控制器不适合运行Linux系统。对于需要运行Linux的应用,更适合选择ARM Cortex-A系列处理器的开发平台。
86 0
|
2月前
|
存储 算法 数据可视化
【C++】C++旅游管理系统(源码+论文)【独一无二】
【C++】C++旅游管理系统(源码+论文)【独一无二】
|
2月前
|
搜索推荐 数据处理 文件存储
【C++】C++ 培训报名系统 (源码+论文)【独一无二】
【C++】C++ 培训报名系统 (源码+论文)【独一无二】
|
2月前
|
存储 C++
【C++】C++公司人事管理系统(源码)【独一无二】
【C++】C++公司人事管理系统(源码)【独一无二】
|
2月前
|
存储 数据可视化 C++
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
|
2月前
|
数据可视化 C++
【C++】C++商店销售管理系统(源码+论文)【独一无二】
【C++】C++商店销售管理系统(源码+论文)【独一无二】
下一篇
无影云桌面