stm32入门学习(基于STM32F103C8T6)

“じゃ、始めましょう。”

                                                                          --最近在学外语,对于IT从业者来说,会是一项优势

资料来源:杨桃电子(老师很细心)

目录

一 、相关基础知识

1.ARM是什么?

2.STM32?

  是cortex系列(ARM11之后的芯片)芯片生产厂家中最有发展前景的 ,推出M系列的公司有ST、英飞凌、飞思卡尔、德州仪器、新唐科技等等。

  https://www.st.com

  对于不同的产品类型,可以根据需要选择对应的封装,下载对应的数据手册 。

3.STM32的命名规范

  ps:STM32F103C8T6的名称由来

ST-M-32-F-1-03-C-8-T-6-xxx

 4.关于STM32F103C8T6的功能了解

单片机最小系统电路:内核+存储器+时钟+复位+电源管理,找到产品数据手册,了解芯片的通用结构

4.1 内核:
4.2 存储器:FLASH和SRAM的互补,一个掉电不丢失但是速度慢,一个掉电丢失但是速度快。

插图

4.3 时钟+复位+电源管理

关于晶体振荡器与RC振荡器

插图

关于晶体振荡器、RC、RTC、PLL(锁相环)等等

-----后期单开个专题吧,感觉有点难懂,硬件我不行-----

//以上这些功能加在一起,就能够让单片机正常工作,只不过还没有加外设,相当于一个还没有下载任何APP的新手机,能开机关机,但你想实现满足自己需求的功能,就得下载app,即增加外设。

二 、基本功能

1.低功耗

一般采用电池供电的设备时,为了节约电量,开启低功耗模式 (省电模式)

工作模式关掉的功能唤醒方式
睡眠模式

内核

所有内外部中断(按按鼠标键盘啥的)
停机模式

内核

内部所有的功能

PLL分频器、HSE

给外接引脚电信号唤醒

电源电压监控中断PVD(电压低于一定值)

RTC闹钟定时

USB唤醒信号

待机模式

内核

内部所有的功能

PLL分频器、HSE

SRAM内容消失(唤醒之后程序从头开始,即复位) 

NRST上的外部复位信号、

IWDG复位、

WKUP引脚上的一个上升边
沿或RTC的闹钟到时。

2.ADC

3. DMA和IO端口

 普通IO口与GPIO口的区别?什么是推挽开漏、上拉下拉?什么是复用,如何实现?

4. 调式模式

省去了CH340芯片,为单片机的调试烧录提高效率

5.七个定时器

− 3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入 

通用定时器(TIMx)


STM32F103xx增强型产品中,内置了多达3个可同步运行的标准定时器(TIM2、TIM3和TIM4)。每个定时器都有一个16位的自动加载递加/递减计数器、一个16位的预分频器和4个独立的通道,每个通道都可用于输入捕获、输出比较、PWM和单脉冲模式输出,在最大的封装配置中可提供最多12个输入捕获、输出比较或PWM通道。
它们还能通过定时器链接功能与高级控制定时器共同工作,提供同步或事件链接功能。在调试模式
下,计数器可以被冻结。任一标准定时器都能用于产生PWM输出。每个定时器都有独立的DMA请求
机制。
这些定时器还能够处理增量编码器的信号,也能处理1至3个霍尔传感器的数字输出。


− 1个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器

高级控制定时器(TIM1)


高级控制定时器(TIM1)可以被看成是分配到6个通道的三相PWM发生器,它具有带死区插入的互补
PWM输出,还可以被当成完整的通用定时器。四个独立的通道可以用于:
● 输入捕获
● 输出比较
● 产生PWM(边缘或中心对齐模式)
● 单脉冲输出
配置为16位标准定时器时,它与TIMx定时器具有相同的功能。配置为16位PWM发生器时,它具有全
调制能力(0~100%)。
在调试模式下,计数器可以被冻结,同时PWM输出被禁止,从而切断由这些输出所控制的开关。
很多功能都与标准的TIM定时器相同,内部结构也相同,因此高级控制定时器可以通过定时器链接功
能与TIM定时器协同操作,提供同步或事件链接功能。


− 2个看门狗定时器(独立的和窗口型的)

独立看门狗


独立的看门狗是基于一个12位的递减计数器和一个8位的预分频器,它由一个内部独立的40kHz的RC
振荡器提供时钟;因为这个RC振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过选项字节可以配置成是软件或硬件启动看门狗。在调试模式下,计数器可以被冻结。


窗口看门狗


窗口看门狗内有一个7位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式下,计数器可以被冻结。 


− 系统时间定时器:24位自减型计数器

系统时基定时器(滴答计时器)


这个定时器是专用于实时操作系统,也可当成一个标准的递减计数器。它具有下述特性:
● 24位的递减计数器
● 自动重加载功能
STM32F103x8, STM32F103xB数据手册
参照2009年4月 STM32F103x8B数据手册 英文第10版 (本译文仅供参考,如有翻译错误,请以英文原稿为准) 10/62
● 当计数器为0时能产生一个可屏蔽系统中断
● 可编程时钟源


6.通信接口(//需要与外界达成标准协议

在此我们讨论一下I/O接口与通讯接口的区别

I/O接口:通过电平信号能够进行普通的数据输入输出,但是用户需要自行定义。//需要用户根据不同电子设备的通讯要求去定义接口,十分繁琐。

通讯接口:国际通用的标准通讯方案,能够通过在电路板上集成相关的接口,进行高效的通讯。//只需要搞懂相关协议,只要符合这种协议的产品,都可以使用该接口进行数据传输。


■ 多达9个通信接口
− 多达2个I2C接口(支持SMBus/PMBus)
− 多达3个USART接口(支持ISO7816接口,
LIN,IrDA接口和调制解调控制)
− 多达2个SPI接口(18M位/秒)
− CAN接口(2.0B 主动)
− USB 2.0全速接口

 I2C总线


多达2个I2C总线接口,能够工作于多主模式或从模式,支持标准和快速模式。
I2C接口支持7位或10位寻址,7位从模式时支持双从地址寻址。内置了硬件CRC发生器/校验器。
它们可以使用DMA操作并支持SMBus总线2.0版/PMBus总线。

I2C(芯片间)总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式,同时与SMBus 2.0兼容。
I2C模块有多种用途,包括CRC码的生成和校验、SMBus(系统管理总线—System Management Bus)和PMBus(电源管理总线—Power Management Bus)。
根据特定设备的需要,可以使用DMA以减轻CPU的负担。

USART接口

通用同步/异步收发器(USART)
USART1接口通信速率可达4.5兆位/秒,其他接口的通信速率可达2.25兆位/秒。USART接口具有硬件的CTS和RTS信号管理、支持IrDA SIR ENDEC传输编解码、兼容ISO7816的智能卡并提供LIN主/从功能。
所有USART接口都可以使用DMA操作。 

 SPI接口

 串行外设接口(SPI)

多达2个SPI接口,在从或主模式下,全双工和半双工的通信速率可达18兆位/秒。3位的预分频器可产生8种主模式频率,可配置成每帧8位或16位。硬件的CRC产生/校验支持基本的SD卡和MMC模式。
所有的SPI接口都可以使用DMA操作。

 在大容量产品和互联型产品上,SPI接口可以配置为支持SPI协议或者支持I2S音频协议。SPI接口默认工作在SPI方式,可以通过软件把功能从SPI模式切换到I2S模式。
在小容量和中容量产品上,不支持I2S音频协议。
串行外设接口(SPI)允许芯片与外部设备以半/全双工、同步、串行方式通信。此接口可以被配置成主模式,并为外部从设备提供通信时钟(SCK)。接口还能以多主配置方式工作。
它可用于多种用途,包括使用一条双向数据线的双线单工同步传输,还可使用CRC校验的可靠通信。
I2S也是一种3引脚的同步串行接口通讯协议。它支持四种音频标准,包括飞利浦I2S标准,MSB和LSB对齐标准,以及PCM标准。它在半双工通讯中,可以工作在主和从2种模式下。当它作为主设备时,通过接口向外部的从设备提供时钟信号。
警告: 由于SPI3/I2S3的部分引脚与JTAG引脚共享(SPI3_NSS/I2S3_WS与JTDI,SPI3_SCK/I2S3_CK与JTDO),因此这些引脚不受IO控制器控制,他们(在每次复位后)被默认保留为JTAG用途。如果用户想把引脚配置给SPI3/I2S3,必须(在调试时)关闭JTAG并切换至SWD接口,或者(在标准应用时)同时关闭JTAG和SWD接口。详见第8.3.5 457/754节:JTAG/SWD复用功能重映射。

CAN接口

控制器区域网络(CAN)
CAN接口兼容规范2.0A和2.0B(主动),位速率高达1兆位/秒。它可以接收和发送11位标识符的标准帧,也可以接收和发送29位标识符的扩展帧。具有3个发送邮箱和2个接收FIFO,3级14个可调的滤波器。 

bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。
对于安全紧要的应用,bxCAN提供所有支持时间触发通信模式所需的硬件功能。 

USB接口 

 USB外设实现了USB2.0全速总线和APB1总线间的接口。
USB外设支持USB挂起/恢复操作,可以停止设备时钟实现低功耗。

STM32F103xx增强型系列产品,内嵌一个兼容全速USB的设备控制器,遵循全速USB设备(12兆位/
秒)标准,端点可由软件配置,具有待机/唤醒功能。USB专用的48MHz时钟由内部主PLL直接产生(时
钟源必须是一个HSE晶体振荡器)。 

7.附加功能 : CRC校验和芯片ID

 CRC(循环冗余校验)计算单元
CRC(循环冗余校验)计算单元使用一个固定的多项式发生器,从一个32位的数据字产生一个CRC码。

在众多的应用中,基于CRC的技术被用于验证数据传输或存储的一致性。在EN/IEC 60335-1标准的范围内,它提供了一种检测闪存存储器错误的手段,CRC计算单元可以用于实时地计算软件的签名,并与在链接和生成该软件时产生的签名对比。

8.还有NVIC、EXTI等等(在内核篇讲吧)

记得把以下框图看懂哦,要知道每一个部分的基本功能

----

以上每个小结单独开一篇

开发板

这里插一句,讲一讲单片机的基本结构

上图!!!

MCU通过引脚接口与核心板连接 ,MCU根据封装不同对应的引脚数量也不同,而核心板则对应引脚来引出其基本功能并通过排针来接上开发板,以方便其扩展外设。有的开发板是做成一体的,就是核心板和开发底板是焊死在一起的。

三、时钟、复位和电源管理

RTC

作用:内部的RC震荡器随着温度的升高飘逸 ,计时精度不够高。所以外置石英晶体晶振,核心板还继承了一个RTC备用电池,为了在是主电源断开时给RTC时钟供电,和备用寄存器共同作用保存备用存储器(SRAM)数据,和定时时间,不会被复位。故而外部晶振和备用电池主要用于实时时间精准走时。

如果RTC作为唤醒计时器,则不需要外部晶振和电池,内部的40kRC振荡器就可以了。

作为日历:从1970-1-1  00:00:00

原理:

驱动程序: 

继电器

 小功率带动大功率。一些大电压的开关在开合时释放的电压巨大,我们通过一个小功率的触点去带动它闭合。

ULN2003 芯片

三 、软件安装与相关库

我们是如何对单片机进行编程的呢?首先就要谈到市面上最流行的软件KEIL了

KEIL 4

KEIL是一款能把用户的C语言、汇编语言等等转换为HEX、BIN文件的软件开发平台,它集合了程序编辑、编译、调试仿真等等功能,构成集成开发环境(IDE),其中针对于STM32的arm内核的编译器为Keil MDK。

如何在Keil上写程序并生成可以在单片机上面跑起来的程序?

看这里!

通过哪些接口?要使用哪些引脚和硬件支持呢?

ISP程序下载器(FlyMCU)

将keil生成的.hex文件加载入FLYMCU,USB对应的PC上面的串口会将数据传输至单片机。

如果使用RamISP的话,烧录程序的速度更快哦!

那么问题来了——单片机是怎么知道什么时候下载程序,什么时候运行程序?

这就要说到启动程序了,单片机有两个引脚,BOOT0和BOOT1,通过对这两个引脚置位可以切换不同的启动模式

单片机上电后,先检测BOOT0和BOOT1的值:

当BOOT1=0/1,BOOT0=0时 ,单片机直接运行存储在flash中的程序。

当BOOT1=0,BOOT0=1时 ,进入BootLoader程序中进行ISP下载,将.hex文件通过ISP的软件写入单片机。在程序下载完后,切入正常的单片机运行模式,即Flash ISP模式。

当BOOT1=1,BOOT0=1时 ,该模式主要用于调试阶段,将程序下载进入SRAM中,此时下载速度很快,但是如果单片机突然断电,程序会丢失。 通常应用于已经烧录过的程序进行修改和调试时。

ASP功能则是可以进行自行设置BOOT0和BOOT1的状态并自动下载,以及个各模式的切换。

以上是指用户程序已经上传至单片机之后的工作原理,那么用户程序是怎么跑到单片机上面的呢?

说到这里,就不得不提驱动芯片了

CH340驱动芯片

作用:高性能低成本的USB转串口芯片,也就是说,你用一根USB线连接电脑与单片机(传感器),来把你写的程序下载进去,但是单片机怎么接收你用keil写的C语言程序呢?

答案就是使用一个驱动芯片,它可以将数据转换为TTL、RS232、RS485等等格式。即将数据转换成单片机接口能接受到的数据格式,比如单片机上的SPI、USB、串口、I2C等等接口。

啥是库?库从哪里找?库是怎么产生的?

标准固函数库
寄存器
HAL

硬件->功能配置寄存器->底层驱动程序->用户程序

用户程序与寄存器的交流就是凭借的底层驱动程序,即固件库。究竟啥是固件库?

固件库是由st公司制作的标准函数库,为了省去开发者还要自行书写驱动程序来控制寄存器,干脆由芯片公司自己出一套可以驱动芯片的模板化程序,为开发者提高效率。(有了函数库咱们只需要改改参数,写写main函数就行了。)

固件库的文件

一般可以划分为几种,自己新建工程时,应该在对应的文件夹里面建立以下文件,并给每个文件添加对应的内容,这些内容有的是已经搭建好的库,有的则需要你自己写。

1.CMSIS

核心驱动文件,用于驱动开发板基本功能。不用管

2.LIB

内部功能相关的驱动文件,根据开发所需要用到的功能进行选择,用不到的可以不用载入。不用管

3.Startup

启动文件,用于单片机的启动。不用管

4.user

用户编写的main函数,以及程序发生错误时的文件(后面这个不用管)

5.basic

一些单片机底层最基础的、最小系统相关的程序。如delay.c,sys.c。

6.hardware

用户在外围电路添加的外设硬件的驱动程序。

以上各个工程文件加在一起构成一个project。

工程文件的添加

1.新建文件夹

2.选择开发板类型 

这个时候会出现一个问题,如果我们没有在这里找到对应的库,那么咋办?

当然就是去stm官网或者正点原子之类的地方下载。

双击打开

重启软件并重复以上操作,你就会得到

选好之后点击OK会弹出一个PACK的弹框,直接关闭就好了。然后变成

接下来就是把我们的工程文件导入进当前工程了,那这些文件里面应该放些啥呢?

1.CMSIS

2.LIB

3.Startup

4.user

5.basic

6.hardware

以上各个工程文件加在一起构成一个project。

那么,这些文件里面应该放些啥呢?

四、工程源代码

开始点灯仪式啦!!!

作为一个项目,拿到手我们应该想想,要实现他,需要哪些开启单片机的哪些功能?需要什么硬件参与?

STM32外设资源使用步骤

1.添加外设对应时钟源。

2.配置硬件模式。

3.使能硬件工作。

六、项目举例

  • 28
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
gd32f103c8t6和stm32f103c8t6是两种不同的芯片型号,分别由两家不同的公司生产。 首先,gd32f103c8t6是全志科技推出的一款32位低功耗微控制器芯片,其基于ARM Cortex-M3内核。它在性能、功耗和功能方面与stm32f103c8t6非常相似。gd32f103c8t6提供了高达72 MHz的时钟频率,内置了一系列的外设,例如通用串行总线(USART)、通用同步异步接收传输器(SPI)和通用定时器(TIM),并且具有较低的功耗以满足嵌入式应用的需求。另外,gd32f103c8t6提供了更丰富的Flash存储容量和SRAM容量可供用户使用,使其具备更好的性价比。 而stm32f103c8t6则是意法半导体(STMicroelectronics)公司的一款32位低功耗微控制器芯片,同样基于ARM Cortex-M3内核。它在市场上有较好的知名度,并被广泛应用于各个领域的嵌入式系统。stm32f103c8t6也提供了高达72 MHz的时钟频率,内置了丰富的外设,如UART、SPI和定时器等,以及较低的功耗。它也具备较大的Flash和SRAM容量。 总体而言,gd32f103c8t6和stm32f103c8t6在技术指标上非常接近,功能和性能基本一致。它们的区别主要在于生产厂商和市场认可度。由于全志科技是中国的公司,所以gd32f103c8t6在中国市场有较高的知名度和应用价值,而stm32f103c8t6则因为STMicroelectronics是国际知名公司,在全球范围内更为广泛地被采用。不同芯片所使用的开发工具和支持也会有所不同,需要根据实际需求选择合适的芯片型号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值