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

相关文章
|
5天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
19 0
|
19天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
19 2
|
16天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
39 6
|
5天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0
|
5天前
|
C语言 C++
c++的学习之路:4、入门(3)
c++的学习之路:4、入门(3)
18 0
|
5天前
|
编译器 C++
c++的学习之路:23、多态(2)
c++的学习之路:23、多态(2)
17 0
|
19天前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add&lt;T&gt;`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
12 2
|
26天前
|
芯片
stm32f4外设学习篇(代码集合)(一)
stm32f4外设学习篇(代码集合)
|
4天前
|
设计模式 Java C++
【C++高阶(八)】单例模式&特殊类的设计
【C++高阶(八)】单例模式&特殊类的设计
|
4天前
|
编译器 C++
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象