stm32 订阅
STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核(ST's product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost 8-bit MCUs up to 32-bit ARM-based Cortex®-M0 and M0+, Cortex®-M3, Cortex®-M4 Flash microcontrollers with a great choice of peripherals. ST has also extended this range to include an ultra-low-power MCU platform) [1]  。按内核架构分为不同产品:主流产品(STM32F0、STM32F1、STM32F3)、超低功耗产品(STM32L0、STM32L1、STM32L4、STM32L4+)、高性能产品(STM32F2、STM32F4、STM32F7、STM32H7) [2] 展开全文
STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核(ST's product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost 8-bit MCUs up to 32-bit ARM-based Cortex®-M0 and M0+, Cortex®-M3, Cortex®-M4 Flash microcontrollers with a great choice of peripherals. ST has also extended this range to include an ultra-low-power MCU platform) [1]  。按内核架构分为不同产品:主流产品(STM32F0、STM32F1、STM32F3)、超低功耗产品(STM32L0、STM32L1、STM32L4、STM32L4+)、高性能产品(STM32F2、STM32F4、STM32F7、STM32H7) [2]
信息
外文名
STM32
产品特点
高性能、低成本、低功耗、可裁剪
开发公司
意法半导体 集团
中文名
嵌入式单片机
产品说明
ARM Cortex-M内核单片机
应用领域
嵌入式开发
stm32产品介绍
在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列、互补型系列;新系列产品沿用增强型系列的72MHz处理频率。内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。截至2010年7月1日,市面流通的型号有:基本型:STM32F101R6、STM32F101C8、STM32F101R8、STM32F101V8、STM32F101RB、STM32F101VB增强型:STM32F103C8、STM32F103R8、STM32F103V8、STM32F103RB、STM32F103VB、 STM32F103VE、STM32F103ZESTM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:
收起全文
精华内容
下载资源
问答
  • stm32
    千次阅读
    2022-04-03 14:01:17

    STM32是意法半导体 (STMicroelectronics) 公司推出的新一代基于Cortex-M内核的32位微控制器系列。STM32以其高性能、低功耗、一流的外设、简单易用等特点在近几年迅速发展,占领了很大市场,得到了很多开发者青睐。其应用领域包括电机驱动和应用控制,PC游戏外设和GPS平台 ,可编程控制器(PLC)、变频器、打印机和扫描仪等。(除了STM32,意法半导体公司还推出了8位微处理器STM8系列,因其高性价比也有很多开发者在使用。这里暂不介绍STM8系列)

    STM32系列成员众多,按其性能可分为入门型(F0系列),基础型(F1系列),增强型(F3系列),高性能型(F4,F7等)。按内核的不同分为Cortex-M0(F0系列),Cortex-M3(F1、F3系列),Cortex-M4(F4系列)等。一般初学者选择F103系列较多,既能满足学习要求,又不至于太贵。

    光凭一句“高性能”可能对其性能还是没有什么概念。下面是一个目前存在的单片机的性能分数对照表,可供参考。

     对照表最下面的AT89C52就是最典型的51单片机,可以看到其分数只有2.36。而STM32F103的分数达到了177,STM32F407更是达到了566。

    近几年,国产单片机也迅速崛起,在性能上已经不输国外。例如ESP8266、ESP32系列已经获得众多单片机开发者的喜爱,不仅性能强大,而且自带wifi模块。又如对标STM32的GD32系列,其性能也已经不低于STM32,只是其学习资源不如STM32多。

    很多人都是从51开始学习单片机,大学教材也大都以51单片机为例。STM32相比于51单片机,性能大幅提升,外设也更多,为了方便开发,ST官方专门发布了标准外设库,只要调用外设库里的函数就能轻松使用各种外设,而不需要对寄存器进行直接操作。

    由于STM32功能较强,内部寄存器复杂且多,所以使用起来也相对较麻烦。比如要给某个IO口置高电平,51单片机只要 P0^0=1; 一行程序就能实现,但是STM32首先要调用GPIO的标准外设库,然后进行GPIO初始化并使能对应的时钟,然后才能将GPIO置位(当然也可以直接操作寄存器,不过STM32寄存器太多,使用更不方便)。所以很多51单片机学习者刚开始学习STM32会觉得无从下手,其实只要了解了STM32的库函数,其开发就和51一样简单,而且对于大型的项目开发其优势就体现出来了。学习STM32就是学习其库函数,从官方的库函数使用手册入手,学习起来还是很简单的。

    STM32型号很多,所以有着规范的命名规则,从其型号便可知道其部分参数,如产品类型,Flash容量,封装。

     本文将以STM32F103C8T6这款单片机为例来介绍STM32。

    从命名规则可以知道,STM32F103C8T6是STM32基础型单片机,采用LQFP 48 封装,带有64KB的Flash(闪存程序存储器)。其最高工作频率72MHz,20KB的SRAM,2个12位ADC(模数转换器),7通道DMA控制器并支持定时器、ADC、SPI、IIC等,带有7个定时器,多达9个通信接口(2个IIC、3个USART、2个SPI、CAN接口、USB2.0)。下图是其引脚图。

     由于引脚有限,很多IO口都是功能复用,下图是其IO功能复用情况。

    接下来详细介绍各个外设,

    1.GPIO

    GPIO即通用输入输出口,也就是我们常说的IO口。这款单片机有PA(PA0-PA15)、PB(PB0-PB15)、PC 3组IO(PC13-PC15),类似于STC89C52的P0、P1、P2口,A与B组每组16个,但C组只有3个。GPIO的排列分布不像51单片机那么规则,其实是考虑到开发者需要扩展IO时减少电路图的更改。有些GPIO默认是不做普通IO口的,例如PB4、PB3默认是作为JTAG使用,PC14、PC15默认作为RTC的晶振接口,如需作为普通IO口使用,则需要将对应复用功能屏蔽。

    2.ADC

    这款单片机有两个12位的ADC(PB0:ADC_IN8、PB1:ADC_IN9),用以将0-3.3V的电压模拟量转成数字量(0-2^12)。每个ADC共用多达16个外部通道, 可以实现单次或扫描转换。在扫描模式下,自动进行在选定的一组模拟输入上的转换。需要注意的是,ADC的电源是独立于供电电源的,其供电引脚为VSS-A与VDD-A,一般可以将这两个引脚直接与3.3V电源相连。包括其他的几组VDD和VSS,直接与3.3V电源连接即可(之所以分几个电源,是为了提高供电稳定性)。

    3.晶振

    从上图可以看出,STM32可以外接两个晶振。其中8M晶振就是单片机CPU运行用的,虽然晶振频率只有8M,但其内部频率最高可以达到72MHz,这得益于其内部的分频器,将8M震荡频率经二分频就得到了16M,经过多次分频就能得到更高的频率。

    下图是其时钟树示意图。

    另外一个32.768kHz的低频晶振是用于内部RTC时钟。STM32自带RTC时钟,类似于手机、电脑的系统时钟。不知大家有没有注意过,在我们的手机或者电脑没有联网的时候,重新开机后仍然可以显示时间,其实这就是RTC时钟。原理就是在手机或者电脑主电源断电的情况下,自动启用后备电源(电脑的后备电源就是主板上的纽扣电池),维持RTC时钟晶振工作,以实现主电源断电下也能计时。之所以不采用8M高频晶振作为RTC的振荡源,是因为高频晶振受温度、制作工艺影响大而容易出现误差(RTC的误差就小得多了)。要想使用STM32的RTC,只需要给1号引脚Vbat接一个纽扣电池即可,在未接3.3V电源时,会自动使用纽扣电池供电,接了3.3V电源又会自动切换至3.3V电源供电。因为RTC耗电极低,所以一颗纽扣电池也足够使用很长时间。但是在主电源断电情况下,如果纽扣电池也没电了,内部的时钟时间就会丢失,再次上电就恢复成了初始时间。

    除了内部的RTC,也可使用外置RTC芯片(优点是计时精度更高),实现断电计时的功能。关于其具体用法,以后再做详细介绍。

     4.IIC、USART、SPI通信

    STM32外设丰富,支持硬件级的IIC、USART、SP通信。相比于软件实现的通信,硬件级的更快,更稳定,更方便。

    IIC一般用于单片机与传感器、显示屏、EEPROM等外设间的数据传输。其IIC接口支持 7 位或 10 位寻址, 7 位从模式时支持双从地址寻址。内置了硬件 CRC发生器/ 校验器
    它们可以使用 DMA 操作并支持 SMBus 总线 2.0 /PMBus 总线。

    USART可用于单片机与电脑的的串口通信。USART1接口通信速率可达4.5Mbps,其他接口的通信速率可达2.25MbpsUSART接口具有硬 件的CTSRTS信号管理、支持IrDA SIR ENDEC传输编解码、兼容ISO7816的智能卡并提供LIN/ 从功能。 所有USART接口都可以使用DMA操作。

    SPI比前两种通信拥有更快的通信速率,一般用于数据传输量大的场合,比如控制高分辨率或高刷新率的彩屏。SPI接口,在从或主模式下,全双工和半双工的通信速率可达18Mbps3位的预分频器可 产生8种主模式频率,可配置成每帧8位或16位。硬件的CRC产生/校验支持基本的SD卡和MMC模式。 所有的SPI接口都可以使用DMA操作。

    这三种通信的具体使用方法以后再做专门介绍。

    5.JTAG、SWD与仿真器

    在STM32上有几个接口称为JTAG、SWD。JTAG接口(Joint Test Action Group,联合测试工作组),是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSPFPGA器件等。标准的JTAG接口是4线:TMS(PA13)、TCK(PA14)、TDI(PA15)、TDO(PB3),分别为模式选择、时钟、数据输入和数据输出线。有了JTAG,就可以对单片机程序进行在线调试,包括断点调试,变量监控,对于程序查错是非常方便。

    SWD接口即串行调试(SerialWireDebug),是一种和JTAG不同的调试模式,最直接的区别是调试接口上,SWD只需要4(或者5)个引脚:3.3V、GND、SWDIO(PA13)、SWCLK(PA14)。他的SWDIO、SWCLK与JTAG的TMS、TCK复用了。

    要想实现在线调试,还需要专门的仿真工具。常用的仿真器有J-Link、U-Link、ST-Link。

    J-Link其实就是一个USB转JTAG的工具,可将电脑与JTAG端口相连。JLINK是一个通用的开发工具,可以用于KEIL、IAR、ADS 等平台。速度,效率,功能都很好。

    U-Link是ARM/KEIL公司推出的仿真器,不过现在能买到的都是其升级版本ULINK2和ULINK Pro仿真器。ULINK/ULINK2可以配合Keil软件实现仿真功能,仅可以在Keil软件上使用(不支持IAR、ADS等其他平台)。

    ST-Link是专门针对意法半导体STM8和STM32系列芯片的仿真器。ST-LINK /V2指定的SWIM标准接口和JTAG / SWD标准接口,通过ST-Link可直接将程序写入单片机(SWIM / JTAG / SWD)以及EEPROM烧写,当然也也支持在线仿真,相比另外两种,更具优势。所以个人非常推荐该仿真器。

    6.程序开发平台

    STM32程序开发平台主要有Keil、IAR、STM32CudeIDE等。Keil支持众多单片机开发,版本如今已更新到Keil 5。IAR相比Keil,编译的代码更紧凑,实际使用与Keil差不多。STM32CudeIDE是STM专门为STM32开发的IDE,但是使用还是比不上前两种平台。

    7.其他

    内部温度传感器:STM内部有一个温度传感器,并连接到PC13,可用于监测芯片温度。

    控制器区域网络(CAN):CAN 接口兼容规范 2.0A 2.0B( 主动 ) ,位速率高达 1Mbps 。它可以接收和发送 11 位标识符的标准帧, 也可以接收和发送29 位标识符的扩展帧。具有 3 个发送邮箱和 2 个接收 FIFO 3 14 个可调节的滤波器。一般用与单片机与上位机的通信。
    通用串行总线 (USB):内嵌一个兼容全速 USB 的设备控制器,遵循全速 USB 设备 (12Mbps
    ) 标准,端点可由软件配置,具有待机 / 唤醒功能。
    定时器:中等容量的STM32F103xx增强型系列产品包含1个高级控制定时器、3个普通定时器,以及2个看门 狗定时器和1个系统嘀嗒定时器。
    看门狗:用于防止程序跑偏。独立的看门狗是基于一个 12 位的递减计数器和一个 8 位的预分频器,它由一个内部独立的 40kHz RC 振荡器提供时钟;因为这个RC 振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当 成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过 选项字节可以配置成是软件或硬件启动看门狗。在调试模式下,计数器可以被冻结。窗口看门狗内有一个7 位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问 题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式下,计数器可以被冻结。
    本文纯属个人理解,如有错误,欢迎指正
    更多相关内容
  • STM32全系列 Keil MDK pack离线包 注:由于上传大小限制,除了F0和F1的包,其他的提供链接通过百度云下载。 包括以下包,当前最新版本(20200115) Keil.STM32F0xx_DFP.2.0.0.pack Keil.STM32F1xx_DFP.2.3.0....
  • STM32CubeMx6.4.0版本+JRE安装包
  • 本参考手册针对应用开发,提供关于如何使用STM32F101xx、STM32F102xx、STM32F103和 STM32F105xx/STM32F107xx 微控制器的存储器和外设的详细信息。在本参考手册中 STM32F101xx 、 STM32F102xx 、 STM32F103 和 STM...
  • 携手STM32CubeMX玩转STM32

    万人学习 2019-04-19 09:30:00
    本课程教大家如何利用STM32CubeMX玩转STM32STM32CubeMX支持的所有型号MCU都适用于本课程)。课程内容分为基础内容和扩展内容,例如:讲解串口时会扩展开讲Xmodem通信协议,讲解ADC/DAC时会扩展讲傅里叶计算,讲解...
  • stm32+4G从零开始连接阿里云IOT

    千人学习 2021-03-06 18:33:46
    本课程着重介绍如何使用stm32+4G通信模组连接阿里云物联网平台,实现数据属性上报以及远程升级功能。在本课程中,大家可以学习到如何使用操作阿里云物联网平台;4G模块和AT指令的编程技巧;以及MQTT协议的内容和源码...
  • 包含F0、F1、F2、F3、F4等系列,有原理图库,PCB库,都是整理好的,可以直接使用。
  • STM32CubeMX用户手册中文版

    热门讨论 2018-05-06 14:02:54
    STM32CubeMX 中文 UM1718翻译版 重新排版 带书签 STM32CubeMX是32位ARM®Cortex®STM32微控制器的图形工具。 它是STMCube™计划的一部分(请参阅第一节),可以作为独立的应用程序使用,也可以作为集成开发环境(IDE...
  • GD32 介绍与 STM32 兼容性汇总。STM32的代码直接在GD32上运行需要小部分的修改。按教程做对应修改就行哈。
  • stm32 proteus 仿真示例

    2018-06-15 09:10:35
    Proteus 仿真stm32单片机,实现最小系统功能,可以完全运作, 若有无反应电源设置后就能正常运行
  • STM32F407 cortex-m4的高端芯片,常用于嵌入式产品中,内含DSP,是做前端设备的流行芯片。亲测好用,挺不错的资源,需要的人,就快来下载吧!很有用的!
  • 里面有两个文件夹,第一个是基础版本,第二个可以触屏改变采样频率,进而优化频率分辨率,使频谱分析更精确。频谱分析(50Hz~200Hz,其他范围内应该也可以)包括了基频,3,5,7次谐波的峰值,波形识别可识别正弦,...
  • keil5软件需要安装STM32芯片开发包,在此提供STM32F1系列,如STM32F100,STM32F101,STM32F102,STM32F103等芯片包
  • 第一次弄STM32,觉着HAL库很好用,新手入门很快,文档里面有详细的函数使用描述
  • 时钟功能 还有闹钟功能,温湿度功能,整点报时功能 你值得拥有
  • STM32新手入门教程

    万次阅读 多人点赞 2020-11-24 09:53:38
    STM32简介 简介参考自:小马哥STM32四轴学习平台–DragonFly四轴STM32单片机软件入门级飞控算法课程 单片微型计算机简称单片机(MCU(MicrbControl Unit)),我们自己的个人计算机中,CPU、RAM、ROM、I/O这些都是...

    STM32简介

    简介参考自:小马哥STM32四轴学习平台–DragonFly四轴STM32单片机软件入门级飞控算法课程

    单片微型计算机简称单片机(MCU(MicrbControl Unit)),我们自己的个人计算机中,CPU、RAM、ROM、I/O这些都是单独的芯片,然后这些芯片被安装在一个主板上,这样就构成了我们的PC主板,进而组装成电脑,而单片机只是将这所有的集中在了一个芯片上而已。单片机又有8位的如51单片机、16位的如MSP430、32位的如STM32,通常我们说的多少位通常指的是内核(CPU)一次处理的数据宽度。也就是说内核一次处理的位数越多单片机的计算速度就越快,性能也就越强悍。

    STM32是意法半导体(ST)推出一款32位的单片机。STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性、极低的开发成本等优势。STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多32位单片机中脱颖而出。

    STM32芯片内部可以粗略划分两部分:内核+片上外设。如果与电脑类比,内核与片上外设就如同电脑的CPU与主板、内存、显卡、硬盘的关系。
    ARM公司只设计内核不生产芯片,他会将有关内核的技术授权给各半导体厂商例如ST、TI、Atme1、NXP等厂商。这些厂商都是基于这个内核自己设计片上外设如SRAM、ROM、FLASH、USART、GPIO等,然后集成到一个硅片上,这就是我们现在用的芯片。
    芯片内部架构见图:

    image-20201123192912952

    芯片内部内核和外设分别是两个公司设计的,那他们该怎么联系到一起协同高效的工作呢?答案就是总线,学过计算机组成原理的同学都应该知道计算机五大组成部分运算器、控制器、存储器、输入设备、输出设备他们之间的通信就是通过总线。我们上面也说了单片机就是一个集成在硅片上的计算机,所以他内部的连接关系也是靠总线。
    STM32内部一共有11条总线:

    我们知道,在嵌入式开发中,比如51和Arduino,我们写程序烧入芯片就可以实现控制。那么我们写的程序怎么就能控制我们的单片机工作呢或者程序在控制什么东西呢?
    那个东西就是寄存器,其实不管我们用库开发还是寄存器开发我们本质上就是在控制寄存器上的每个位的通断,并且这些寄存器都有其特定的功能。换句话说每个外设(如GPI0、USART、I2C、SPI.…)都对应有寄存器来对他控制。

    所以STM32可以用寄存器开发也可以用库开发

    STM的选型

    STM32是ST的所有产品的统称,ST有两大家族STM8和STM32。STM8主要针对于低成本,对主频要求比较低、运算速度要求不是很高的低端市场。STM32主要应用于项目对主频要求较高、运算速度比较快、实时性好的中高端市场。STM32有很多产品大致划分可分为主流MCU、高性能MCU、低功耗MCU。其中主流MCU如STM32F1系列、高性能MCU如STM32F4、STM32F7系列、低功耗MCU如STM32L0系列。并且每个系列产品下面还会根据闪存容量、外设数量、封装大小分为很多种类并且价格也是差别很大。

    STM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:

    1STM32STM32代表ARM Cortex-M内核的32位微控制器。
    2FF代表芯片子系列。
    3103103代表增强型系列。
    4RR这一项代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚,I代表176脚。
    5BB这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash,G代表1M字节Flash。
    6TT这一项代表封装,其中H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装。
    766这一项代表工作温度范围,其中6代表-40——85℃,7代表-40——105℃。

    我手上是一款德飞莱尼莫M3S V2.3开发板

    (德飞莱)尼莫M3S串口驱动安装及下载程序使用说明书

    用的是STM32F103ZET6,芯片说明书如下:

    之后还购置了一款最小系统板,搭载STM32103C8T6

    编写程序

    先下载keil软件(官网下载MDK5的安装包):

    微信截图_20201120175054

    注意:

    所以要开发C51就得下载C51的Keil要开发STM32就得下载MDK-Arm

    如果要设置C51和STM32的开发环境,一般需要准备如下文件:

    微信截图_20201120175054

    资源链接: 百度网盘密码:d1cs

    安装可以参考这个:STM32开发环境搭建(Keil)

    MDK5安装破解以及安装stm32与C51支持包(附安装包)

    其中pack文件是STM32的芯片包,可以在安装完keil后下载(KEIL公司的软件包托管网站)双击安装,也可以去keil的pack Installer安装。

    Keil安装

    选择安装路径时包括选择MDK核心组件(Core)的安装路径和外设包(Pack)的安装路径,一般只用选择 Core 的安装路径,Pack 的路径会自动设置为 Core 路径下的ARM/PACK

    安装完成后,会自动弹出 Pack Installer 界面,如果没有的话可以打开安装好的 Keil uVision5 软件,在工具栏上找到 Pack Installer 的图标,然后点击进入:

    mdk5_pack_installer

    由于我们使用的STM32型号为 STM32F103ZET6,还需要安装开发所需要的器件支持包(Device Family Pack, i.e. DFP),所以展开STM系列产品的菜单栏,找到芯片设备,点击左边Packs中的三个组件,Pack Installer 会自动从网上下载最新版本的组件,下载进度在 Pack Installer 底部状态栏显示。(由于我已经通过双击安装好了,所以是Up to date)

    image-20201123165751452

    直接用Keil5新建工程(只能用Keil5快速新建工程)。

    Project-> New,之后选择自己的开发板芯片:

    确定之后又跳到运行环境的界面:

    必选CMSIS的Core还有Device的Startup

    如果要连接外设必须勾选外设的时钟RCC,一般再勾选上FrameworkGPIO、和USART串口。

    点击OK确定创建项目。项目创建完成后就是这样的:

    可以看到已经包含了我们选择的库文件。如果还需要什么可以再点击图上的按钮再次打开运行环境配置页面。

    之后可以右键点击左侧的资源管理器,管理一下项目目录,比如自定义名字。

    然后添加main.c文件:

    之后就可以在main文件中写代码了。

    写完可以编译一下,如果输出正确就表示环境配置没问题。

    这里默认是不会创建Hex文件的,所以还需要进入设置里面去设置一下。

    点击魔法棒:

    进入设置界面

    之后再编译就可以在Objects文件夹下面看到Hex文件。

    烧写程序

    1. USB转串口烧写

    参考这个:如何使用串口来给STM32下载程序

    不过具体还得看官方的开发板说明书。

    2. ST-Link烧写

    用stlink下载比USB转TTL稍快一些,而且ST-Link可以进行仿真,对于大型程序的调试非常有用。

    安装使用可以参考这个:STM32 ST-LINK Utility介绍、下载、安装、使用方法

    STLink 上 LED 指示灯用于提示当前的工作状态,具体情况如下:

    • LED 闪烁红色:STLink 已经连接至计算机。
    • LED 保持红色:计算机已经成功与 STLink 建立通信连接。
    • LED 交替闪烁红色绿色:数据正在传输。
    • LED 保持绿色:最后一次通信是成功的。
    • LED 为橘黄色:最后一次通信失败。

    下载程序说白了就是3步:

    1.连接芯片:

    Tarage -> connect或直接点击连接快捷按钮:

    2.打开程序

    打开hex文件可以从菜单栏(File -> Open File)打开,也可以直接讲hex文件拖动到FLASH区域:

    3.下载程序

    点击“下载”(可以Taraget -> Program,也可以直接点击下载快捷按钮,如下图):

    弹出信息确认窗口,如hex文件路径、验证方式等,确认信息无误后点击“Start”开始下载程序。

    出现“Verification…OK”,说明下载成功。

    ST-Link仿真

    ST-LINK是专门针对STM8和STM32系列芯片的仿真器。使用ST-Link调试器,可以直接在Keil环境下进行下载,而且还可以进行在线调试

    参考自:STM32 Keil中关于stlink的调试 下载设置

    首先进入设置界面。找到Debug ,选择stlink调试器,点击setting:

    选择模式为SW模式,点击确定:

    点击Utilities选项卡,先取消use debug driver ,然后再选择选择ST-Link Debugger,点击Settings:

    首先先是要打勾,然后根据芯片flash的大小添加(Add)相应的信息,最后点击确定即可:

    仿真的过程如下:

    首先是重新编译整个项目:

    微信截图_20201124152723

    点击仿真按钮:

    进入仿真页面(以后面讲解的闪烁LED的程序为例):

    微信截图_20201124153818

    具体的调试方法这里就不说了。毕竟也是新手,目前还用不到调试功能,只是出于好奇研究了一下相关配置。

    想深入研究可以参考Keil系列教程09_调试仿真

    点亮LED灯

    GPIO简介

    参考自:【STM32开发】STM32 GPIO配置

    GPI0是通用输入输出端口的简称,从名字上也可看出GPIO最基本的功能就输入和输出。它也是芯片内部与外部电路连接的唯一的接口,换句话说只要我们使用片上外设几乎都会与GPIO打交道。
    GPI0基本功能是输入和输出,但是STM32本身就是一个很复杂的系统,内部外设繁多,那么GPIO的基本功能是肯定满足不了这么多外设的需求,芯片厂商为了解决此问题,将GPI0分为八种模式(输入4种+输出4种)。八种模式分别为:

    1. 输入浮空 GPIO_Mode_IN_FLOATING

    2. 输入上拉 GPIO_Mode_IPU

    3. 输入下拉 GPIO_Mode_IPD

    4. 模拟输入 GPIO_Mode_AIN

    5. 具有上拉或下拉功能的开漏输出 GPIO_Mode_Out_OD

    6. 具有上拉或下拉功能的推挽输出 GPIO_Mode_Out_PP

    7. 具有上拉或下拉功能的复用功能推挽 GPIO_Mode_AF_PP

    8. 具有上拉或下拉功能的复用功能开漏 GPIO_Mode_AF_OD

    我的STM32开发板板载两个LED小灯,电路图如下:

    GPIO配置

    由于STM32的GPIO工作模式有8种,所以在GPIO输出之前要先对要操作的GPIO进行配置:

    • 定义GPIO的初始化结构体类型

    • 使能GPIO的时钟

    • 配置GPIO的引脚

    • 配置GPIO口的输出类型为推挽

    • 配置GPIO口的输出速度

    • 初始化GPIO(初始化相应的寄存器)

    GPIO_InitTypeDef GPIO_InitStructure;  // 定义结构体变量
    //打开PB口时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    //打开PE口时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    //PB5,PE5引脚设置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    //设置输出速率50MHz
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //推挽输出模式
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    //初始化外设GPIOx寄存器
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_Init(GPIOE, &GPIO_InitStructure);
    

    解释:

    1.定义GPIO的初始化类型结构体:

    GPIO_InitTypeDef GPIO_InitStructure;
    

    此结构体的定义是在stm32f10x_gpio.h文件中,其中包括3个成员。

    typedef struct
    {
      uint16_t GPIO_Pin;       
      GPIOSpeed_TypeDef GPIO_Speed;  
      GPIOMode_TypeDef GPIO_Mode;   
    }GPIO_InitTypeDef;
    

    (1)uint16_t GPIO_Pin;来指定GPIO的哪个或哪些引脚,取值参见stm32f10x_gpio.h头文件的宏定义。

    (2)GPIOSpeed_TypeDef GPIO_Speed;GPIO的速度配置,此项的取值参见stm32f10x_gpio.h头文件GPIOSpeed_TypeDef枚举的定义,其中对应3个速度:10MHz、2MHz、50MHz;

    (3)GPIOMode_TypeDef GPIO_Mode;为GPIO的工作模式配置,其取值参见stm32f10x_gpio头文件GPIOMode_TypeDef枚举的定义,即GPIO的8种工作模式。

    2.使能GPIO时钟

    ARM与C51单片机不同的是,不用外设的时候,如IO口、ADC、定时器等等,都是禁止时钟的,以达到节能的目的,只有要用到的外设,才开启它的时钟。

    void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
    

    此函数是在stm32f10x_rcc.c文件中定义的。其中第一个参数指要打开哪一组GPIO的时钟,取值参见stm32f10x_rcc.h文件中的宏定义,第二个参数为打开或关闭使能,取值参见stm32f10x.h文件中的定义,其中ENABLE代表开启使能,DISABLE代表关闭使能。

    3.设置GPIO_InitTypeDef结构体三个成员的值

    这里包括引脚、速度和工作模式,取值可参考第一部分。

    4.初始化GPIO

    void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*  GPIO_InitStruct);
    

    函数配置GPIO,此函数是在stm32f10x_gpio.c文件中定义的,其中第一个参数代表要配置哪组GPIO,取值参见stm32f10x.h文件中的定义,第二个参数是第1步定义的GPIO的初始化类型结构体。

    GPIO电平输出

    官方让GPIO输出高低电平的函数:

    GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    

    函数就是置位GPIO,即让相应的GPIO输出高电平;

    void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
    

    函数是让GPIO复位的,即让相应的GPIO输出低电平。

    程序编写
    # include "stm32f10x.h"
    
    #define LED3_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5)
    #define LED3_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)
    
    void LED_Init(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;  // 定义结构体变量
        //打开PB口时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        //PB5引脚设置
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        //端口速度
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //端口模式,此为输出推挽模式
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        //初始化对应的端口
        GPIO_Init(GPIOB, &GPIO_InitStructure);
    }
    int main()
    {
        LED_Init();
        while(1)
        {
            LED3_ON;
        }
    }
    
    

    闪烁LED灯

    这个实验室做的两个led流水灯。

    程序编写

    首先新建一个文件夹MY

    在该文件夹下新建一个led.h头文件:

    #ifndef __LED_H
    #define __LED_H
    
    #include "stm32f10x.h"
    
    #define LED2_OFF GPIO_SetBits(GPIOE,GPIO_Pin_5)
    #define LED2_ON GPIO_ResetBits(GPIOE,GPIO_Pin_5)
    #define LED2_REV GPIO_WriteBit(GPIOE, GPIO_Pin_5,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5))))
    
    #define LED3_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5)
    #define LED3_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)
    #define LED3_REV GPIO_WriteBit(GPIOB, GPIO_Pin_5,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5))))
    
    void LED_Init(void);
    
    #endif
    
    

    之后新建一个led.c文件:

    #include "led.h"
    
    void LED_Init(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;  // 定义结构体变量
        //打开PB口时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        //打开PE口时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
        //PB5,PE5引脚设置
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        //端口速度
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //端口模式,此为输出推挽模式
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        //初始化对应的端口
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_Init(GPIOE, &GPIO_InitStructure);
    }
    
    

    最后编写main文件:

    # include "stm32f10x.h"
    # include "led.h"
    
    int main()
    {
        uint32_t i; 
        LED_Init(); //初始化LED
    
        LED2_ON;
        LED3_OFF;
        for(i=0; i<0xffffff; i++); //for循环不精确延时
        while(1)
        {
            for(i=0; i<0xfffff; i++); //for循环不精确延时
            LED2_REV;//LED2取反
            LED3_REV;//LED3取反
        }
    }
    
    

    结构目录如图:

    .h文件默认是不显示的。编译通过后,在左侧的.C文件上会出现一个“+”号,点开就是该C文件使用到的h文件。

    实验结果

    展开全文
  • STM32CubeMX中文版

    2017-11-16 17:15:27
    STM32CubeMX用于STM32的配置和初始化C代码生成帮助文档 UM1718官方文档中文翻译版 帮助各位快速配置CubeMX
  • STM32F103C8开发板 STM32最小系统核心板 AD硬件原理图+PCB封装文件,手册,软件开发历程
  • 此资源为基于STM32F407(正点原子-探索者)开发板所做的简易示波器样例。PA4 为DAC正弦波输出引脚 PA5为ADC输入引脚。程序下载进开发板后,将两者短接,可直接在TFT液晶屏幕上看到波形输出。
  • STM32F103C8T6最小系统板详细资料,包含例程,技术手册,原理图,PCB图,学习笔记
  • 经过测试完整好用的STM32F4/7系列核心板pcb,ad软件开发其他软件也可以打开,可以直接用于生产。
  • STM32伺服电机控制器

    2018-01-23 10:06:40
    STM32伺服电机控制,串口,支持G代码解析,移植方便,
  • 该资源包含了除网络上陶晶池串口屏上位机调试视频和一些文档之外,还有一个我自己写的STM32F103的通信程序,以及一个说明文档。该文档详细说明了STM32F1是如何给串口屏发送数据的
  • 描述:硬件:RS485接口 协议:Modbus RTU。功能:采用DMA方式发送数据,中断方式接收数据。注: 接收到指令之后,判断是否是相应指令而进行DMA数据发送。DMA:开启DMA,DMA发送完一帧数据后产生发送完成中断,在DMA...
  • STM32 PLC 源码 仿FX2N

    热门讨论 2017-03-08 07:50:59
    FX2N源码V3.8版,程序框架清晰,支持丰富PLC指令,本人亲自测试代码,PLC程序与三菱GX Works完美兼容如果觉得宝贝好 支持AD/DA模数和数模转换 支持modbus总线通信 支持高速脉冲输出功能PLSY 支持RS232触摸屏通信 ...
  • stm32f103c8t6中文手册

    2018-03-01 10:22:53
    stm32f103c8t6中文手册,有需要的童鞋可以看一下。 STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。
  • stm32f030青风全套教程和程序例程,包括 stm32f030 青风 串口 iic 定时器 LCD GUI 按键中断查询 库函数 spi操作FLASH 文件系统SD卡读取
  • stm32IAP远程更新资料包

    热门讨论 2014-06-20 09:24:34
    1,STM32F10x_AN2557_FW_V3.3.0官方F1xx的例程 2,实验48 串口IAP实验-库函数版--原子旗舰板的例程 3,STM32 IAP源码和测试代码.rar 4,stm32f4_iap_using_usart官方F4xx的例程.zip 5,Stm32iap.rar 6,红龙407...
  • OLED 屏幕显示时间,温度。时间可以校准,屏幕通过取模,可以显示汉字。
  • stm32f030c8t6利用RTC唤醒低功耗模式stop和standy模式,也可以利用wakeUP引脚和外部中断唤醒;无RTC时低功耗standby模式3.1微安uA,在3.3V侧,进入待机模式之后,测得功耗为3.1uA,在停止模式stop mode,测得为5.5uA....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 315,657
精华内容 126,262
关键字:

stm32

友情链接: wireless_physical_layer.rar