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(一)STM32简介

    万次阅读 多人点赞 2018-02-03 14:44:00
    大家好,今天我跟大家分享一下学习STM32的一些收获,希望对初学STM32的同学有所启示。当然,本人也是一名初学者,如果有谈论不妥之处,还望您能够批评指正,不吝赐教,本人将非常感激。如果有什么问题,欢迎您到...

            大家好,今天我跟大家分享一下学习STM32的一些收获,希望对初学STM32的同学有所启示。当然,本人也是一名初学者,如果有谈论不妥之处,还望您能够批评指正,不吝赐教,本人将非常感激。如果有什么问题,欢迎您到http://www.openedv.com/进行提问与讨论。最后祝您学业有成,工作顺利。

    一、什么是STM32?

           意法半导体(ST)集团于1988年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司,是世界最大的半导体公司之一。 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)。
    它具有以下三个特点

     •新的基于ARM内核的32位MCU系列   

      –标准的ARM架构     –内核为ARM公司为要求高性能、低成本、低功耗的嵌入式应用专门设计的Cortex-M内核

     •超前的体系结构 

       –高性能     –低电压      –低功耗     –创新的内核以及外设

     •简单易用/自由/低风险

    Cortex-M3系列属于ARMv7架构

    ARMv7架构定义了三大分工明确的系列:

    •      “A”系列:面向尖端的基于虚拟内存的操作系统和用户应用
    •      “R”系列:针对实时系统;
    •      “M”系列:对微控制器。

    STM32F1属于Cortex-M系列中的Cortex-M3内核,采用ARMv7-M架构。STM32F4属于Cortex-M4系列采用ARMv7-ME架构。Cortex-A5/A8采用ARMv7-A架构。传统的ARM7系列采用的是ARMv4T架构。(想了解更多可参考韦东山老师的《Linux应用开发完全手册》第一章)

    那么STM32与ARM有什么区别呢?

    Cortex-M家族

    STM32的命名规则


    STM32的应用场景

    STM32的应用场景还有很多,这里只是简单地列出一些。 

    总的来说STM32具有如下优势

     1)极高的性能:主流的Cortex内核。
     2)丰富合理的外设,合理的功耗,合理的价格。
     3)强大的软件支持:丰富的软件包。
     4)全面丰富的技术文档。
     5)芯片型号种类多,覆盖面广。
     6)强大的用户基础:最先成功试水CM3芯片的公司,积累了大批的用户群体,为其领先做铺垫。


    二、按内核架构分为不同产品

        主流产品(STM32F0、STM32F1、STM32F3)
        超低功耗产品(STM32L0、STM32L1、STM32L4、STM32L4+)
        高性能产品(STM32F2、STM32F4、STM32F7、STM32H7)


    三、STM32F103板载资源(以正点原子MiniSTM32F103RCT6为例)

    1.ALIENTEK MiniSTM32 V3.0开发板板载资源如下:

     ◆CPU:STM32F103RCT6,LQFP64,FLASH:256K,SRAM:48K;
     ◆1个标准的JTAG/SWD调试下载口
     ◆1个电源指示灯(蓝色)
     ◆2个状态指示灯(DS0:红色,DS1:绿色)
     ◆1个红外接收头,配备一款小巧的红外遥控器
     ◆1个IIC接口的EEPROM芯片,24C02,容量256字节
     ◆1个SPI FLASH芯片,W25Q64,容量为8M字节(即64M bit)
     ◆1个DS18B20/DS1820温度传感器预留接口
     ◆1个标准的2.4/2.8/3.5/4.3/7寸LCD接口,支持触摸屏
     ◆1个OLED模块接口(与LCD接口部分共用)
     ◆1个USB串口接口,可用于程序下载和代码调试
     ◆1个USB SLAVE接口,用于USB通信
     ◆1个SD卡接口
     ◆1个PS/2接口,可外接鼠标、键盘
     ◆1组5V电源供应/接入口
     ◆1组3.3V电源供应/接入口
     ◆1个启动模式选择配置接口
     ◆1个2.4G无线通信接口
     ◆1个RTC后备电池座,并带电池
     ◆1个复位按钮,可用于复位MCU和LCD
     ◆3个功能按钮,其中WK_UP兼具唤醒功能
     ◆1个电源开关,控制整个板的电源
     ◆3.3V与5V电源TVS保护,有效防止烧坏芯片。
     ◆独创的一键下载功能
     ◆除晶振占用的IO口外,其余所有IO口全部引出

     

    2.芯片资源

    芯片内部资源描述(STM32F103ZET6&STM32F103RCT6)

     内核

      -32位 高性能ARMCortex-M3处理器 

      -时钟:高达72M,实际还可以超屏一点点 

      -单周期乘法和硬件除法

     IO口

         -STM32F103ZET6:  144引脚  112个IO 

         -STM32F103RCT6: 64引脚  51个IO

         -大部分IO口都耐5V(模拟通道除外)          -支持调试:SWD和JTAG,SWD只要2根数据线

     存储器容量

        -STM32F103ZET6:  512K  FLASH,64K  SRAM 

        -STM32F103RCT6: 256K  FLASH,48K  SRAM

     定时器:多达11个定时器

       -4个通用定时器    -2个基本定时器    -2个高级定时器 

       -1个系统定时器    -2个看门狗定时器

     通信接口:多达13个通信接口

        -2个I2C接口    -5个串口    -3个SPI接口    -1个CAN2.0    -1个USBFS    -1个SDIO

     时钟,复位和电源管理

      ①2.0~3.6V电源和IO电压

      ②上电复位,掉电复位和可编程的电压监控

      ③强大的时钟系统

      -4~16M的外部高速晶振 -内部8MHz的高速RC振荡器 

      -内部40KHz低速RC振荡器,看门狗时钟

      -内部锁相环(PLL,倍频),一般系统时钟都是外部或者内部高速时钟经过PLL倍频后得到

      -外部低速32.768K的晶振,主要做RTC时钟源

     3、STM32F103xC、STM32F103xD和STM32F103xE器件功能和配置

    4.关于一些常见外设挂载在哪些总线之下?(APB1与APB2)

    APB2下的外设:

    APB1下的外设:

    • DCA
    • 电源控制接口
    • 后备寄存器
    • CAN
    • USB

    • 这里大家只要记住TIM1 和 TIM8、GPIO、ADC、SPI等是高速外设,所以挂载在APB2总线之下(APB2、APB1,2>1,所以APB2为高速时钟总线),TIM2~TIM7 挂载在APB1总线之下,就够了。
    • 其他常见的记不住的话,用到了去查《stm32中文参考手册》第28页29页就可以了。

    四、STM32学习方法

     1、推荐学习网站:

     ①www.openedv.com 开源电子网,正点原子官方技术支持论坛。正点原子资料发布和售后官方平台。

     ②www.stmcu.org ST中国官方技术网站,ST官方文档发布网站。

     2、需要掌握哪些技能

            C语言是嵌入式开发的基础中的基础。

    点击:了解更多关于STM32的信息

    本次就简单分享这些了,下次为大家详细展示MiniSTM32F103RCT6的各项资源。谢谢您的浏览。

    展开全文
  • 在配置好CubeMX之后,就是新建工程的开始了,那么首先我们需要一些准备,本片博客我们会很详细的介绍STM32CubeMx的基本使用和如何创建一个新的工程并且点亮LED灯 面向初学者 如果您想着快速实现工程的创建,可以直接...

    前言

    在配置好CubeMX之后,就是新建工程的开始了,那么首先我们需要一些准备,本片博客我们会很详细的介绍STM32CubeMx的基本使用和如何创建一个新的工程并且点亮LED灯  面向初学者   如果您想着快速实现工程的创建,可以直接跳过功能介绍,观看工程创建一栏 

    并且,在新建工程时,我们分为了具体流程1~7 如果您不想看每部分的讲解,直接按照流程操作即可,5分钟即可成功点亮LED灯

    安装STM32CubeMx请参看《STM32 CubeMx使用教程一--安装教程》

    前期准备:

    1、STM32硬件(我的是STM32F407ZE和STM32F103ZE)

    2、STM32CubeMx软件、 IDE   Keil(MDK-ARM)软件

    3、STM32F4xxHAL库   

    新建工程

    1在主界面选择File-->New Project   或者直接点击ACCEE TO MCU SELECTOR   

     

    出现芯片型号选择  一般我们直接搜索自己芯片的型号即可   

     如果你是设计产品想要选择一款芯片  在搜索栏的下面,提供的各种查找方式,可以选择芯片内核,型号,等等,帮助你找到适合的芯片

    具体流程1:

    • 1 搜索芯片型号
    • 2选择芯片
    • 3创建工程

    那么接下来就是我们整个流程的重头戏了

    这里我们分成三大块来讲解

    1MCU外设资源选择

    在这里可以选择MCU的各种资源和外设

    提供两种方式

    • Categories  种类选择

    将MCU的各种外设和资源分类,供用户选择使用

    • A-Z  顺序选择

    MCU的外设资源按A-Z 排序,供用户选择使用

    2外设配置

    这里可以设置你所选择外设的各种功能

    这里以串口1为例   我们可以选择串口的模式(异步,同步,半双工)   串口接收中断,和串口DMA传输等等

    和我们配置库函数的时候基本一样,但是  STM32CubeMx将这些转换为了图形和选项  ,我们配置的时候不用再去配置各种东西,只需要傻瓜式操作便可以配置我们需要的外设   这便是CubeMx的核心所在

    3预览界面

    这里分为引脚预览系统预览

    引脚预览就是可以查看那个引脚配置了什么功能,和各个引脚位置  

     

    随便点击一个引脚,即可设置该引脚的各种功能

     

          这种颜色表示不可配置引脚  电源专用引脚以黄色突出显示。其配置不能更改

    这种颜色表示你配置了一个I/O口的功能,但是没有初始化相对应的外设功能  引脚处于no mode 状态  

     

      绿色表示配置成功

     

    系统预览

    系统预览就是查看配置的各种外设和GPIO的状态 

    表示没有问题

    表示警告,对应配置出现问题  点击该选项即可外设配置界面查看

     

    具体各个功能的配置(UATR/DMA/ADC/TIM...)我们再接下来的文章会一一讲解,这里就不再过多介绍了

    具体流程2:

    这里只需要把我们的LED对应引脚设置为GPIO_Output即可

    2时钟源设置

    其实也就是32的时钟树框图让你配置  默认时钟是使用内部RC振荡器(HSI) 

    如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》

    具体流程3:

    或者先按照图中方式配置为72MHz即可

     

    •  需要配置RCC才能够使用外部时钟源

    3.工程管理

    设置完MCU的各个配置之后,第三个就是工程文件的设置了

    具体流程4:

    这里就是工程的各种配置 我们只用到有限几个,其他的默认即可  IDE我们使用的是 MDK5

    • 存储目录不可以有中文

    然后点击Code Generator,进行进一步配置   (重点)

    将HAL库的所有.C和.H都复制到所建工程中 

    优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便

    缺点: 体积大,编译时间长(很长)

    只复制所需要的.C和.H   (推荐)

    优点:体积相对小,编译时间短,并且工程可复制拷贝

    缺点: 新增外设时需要重新用STM32CubeMX导入   

    不复制文件,直接从软件包存放位置导入.C和.H 

    优点:体积小,比较节约硬盘空间

    缺点: 复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径   

    自行选择方式即可

    具体流程5:

    然后点击GENERATE CODE  创建工程

    创建成功,打开工程

    具体流程6:while循环添加下面两行代码即可

        HAL_Delay(500);
        HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15);

    配置下载工具

    具体流程7:

    新建的工程所有配置都是默认的  我们需要自行选择下载模式,勾选上下载后复位运行

    所有自己编写的代码请放在/* USER CODE BEGIN XXX */   /* USER CODE END XXX */之间 

     这样我们修改工程的时候你自己写的代码就不会被删除

     

    到此,STM32CubeMX的基本使用介绍完了 ,接下来会更新CubeMX和HAL库配置STM32的UART ADC DMA 定时器 PWM 等等 

    展开全文
  • STM32】系统时钟RCC详解(超详细,超全面)

    万次阅读 多人点赞 2019-08-08 15:42:35
    1什么是时钟 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏,决定cpu速率,像人的心跳一样 只有...STM32本身十分复杂,外设非常多 但我们实际使用的时候只会用到有...

    1什么是时钟

    时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏,决定cpu速率,像人的心跳一样 只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令,才能够做其他的处理 (点灯,串口,ADC),时钟的重要性不言而喻。

     

    为什么 STM32 要有多个时钟源呢?

    STM32本身十分复杂,外设非常多  但我们实际使用的时候只会用到有限的几个外设,使用任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,为了兼容不同速度的设备,有些高速,有些低速,如果都用高速时钟,势必造成浪费   并且,同一个电路,时钟越快功耗越快,同时抗电磁干扰能力也就越弱,所以较为复杂的MCU都是采用多时钟源的方法来解决这些问题。所以便有了STM32的时钟系统和时钟树

     

    总括:

    • STM32时钟系统主要的目的就是给相对独立的外设模块提供时钟,也是为了降低整个芯片的耗能
    • 系统时钟,是处理器运行时间基准(每一条机器指令一个时钟周期)
    • 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。
    • 一个单片机内提供多个不同的系统时钟,可以适应更多的应用场合。
    • 不同的功能模块会有不同的时钟上限,因此提供不同的时钟,也能在一个单片机内放置更多的功能模块。
      对不同模块的时钟增加开启和关闭功能,可以降低单片机的功耗
    • STM32为了低功耗,他将所有的外设时钟都设置为disable(不使能),用到什么外设,只要打开对应外设的时钟就可以, 其他的没用到的可以还是disable(不使能),这样耗能就会减少。  这就是为什么不管你配置什么功能都需要先打开对应的时钟的原因

     

    STM32的时钟系统框图

     

    乍一看很吓人,但其实很好理解,我们看系统时钟SYSCLK 的左边  系统时钟有很多种选择,而左边的部分就是设置系统时钟使用那个时钟源,   

    系统时钟SYSCLK 的右边,则是系统时钟通过AHB预分频器,给相对应的外设设置相对应的时钟频率

     

    从左到右可以简单理解为  各个时钟源--->系统时钟来源的设置--->各个外设时钟的设置

    时钟系统

    1各个时钟源    (左边的部分)

    STM32 有4个独立时钟源:HSI、HSE、LSI、LSE。
    ①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
    ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz
    ③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。  
    ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

    其中LSI是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源 而独立使用 

    而HSI高速内部时钟 HSE高速外部时钟 PLL锁相环时钟  这三个经过分频或者倍频 作为系统时钟来使用

     

    PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。  通过倍频之后作为系统时钟的时钟源

     

    举个例子:Keil编写程序是默认的时钟为72Mhz,其实是这么来的:外部晶振(HSE)提供的8MHz(与电路板上的晶振的相关)通过PLLXTPRE分频器后,进入PLLSRC选择开关,进而通过PLLMUL锁相环进行倍频(x9)后,为系统提供72MHz的系统时钟(SYSCLK)。之后是AHB预分频器对时钟信号进行分频,然后为低速外设提供时钟。

    或者内部RC振荡器(HSI) 为8MHz  /2 为4MHz 进入PLLSRC选择开关,通过PLLMUL锁相环进行倍频(x18)后 为72MHz

     

    PS:  网上有很多人说是5个时钟源,这种说法有点问题,学习之后就会发现PLL并不是自己产生的时钟源,而是通过其他三个时钟源倍频得到的时钟

    2系统时钟SYSCLK

    系统时钟SYSCLK可来源于三个时钟源:
    ①、HSI振荡器时钟
    ②、HSE振荡器时钟
    ③、PLL时钟
    最大为72Mhz

     

    3USB时钟

    STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取(唯一的),,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz

    4把时钟信号输出到外部

    STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。可以把时钟信号输出供外部使用

    5系统时钟通过AHB分频器给外设提供时钟(右边的部分)  重点

     

    从左到右可以简单理解为  系统时钟--->AHB分频器--->各个外设分频倍频器 --->   外设时钟的设置

     

    右边部分为:系统时钟SYSCLK通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用: 

     ①内核总线:送给AHB总线、内核、内存和DMA使用的HCLK时钟。 

     ②Tick定时器:通过8分频后送给Cortex的系统定时器时钟。 

     ③I2S总线:直接送给Cortex的空闲运行时钟FCLK。 

     ④APB1外设:送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给通用定时器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2-7使用。 

     ⑤APB2外设:送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给高级定时器。该倍频器可选择1或者2倍频,时钟输出供定时器1和定时器8使用。

     

    另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。 

    需要注意的是,如果 APB 预分频器分频系数是 1,则定时器时钟频率 (TIMxCLK) 为 PCLKx。否则,定      时器时钟频率将为 APB 域的频率的两倍:TIMxCLK = 2xPCLKx。 

    APB1和APB2的对应外设

    F1系列

    APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、USART2、USART3、UART4、UART5、SPI2、SP3等;

    而APB2上面连接的是高速外设,包括UART1、SPI1、Timer1、ADC1、ADC2、ADC3、所有的普通I/O口(PA-PE)、第二功能I/O(AFIO)口等。


    F4系列

    这个和F1系列类似,我们就举几个特殊的

     APB2总线:高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11   UTART1,USART6

     APB1总线:通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7  UTART2~UTART5

    F4系列的系统时钟频率最高能到168M

     

    具体  可以在 stm32f10x_rcc.h  和stm32f40x_rcc.h   中查看

    或者通过 STM32参考手册搜索“系统架构”或者“系统结构”  查看外设挂在哪个时钟下

     

    RCC相关寄存器:

    这里我们以F1系列为例

    RCC 寄存器结构,RCC_TypeDeff,在文件“stm32f10x.h”中定义如下:
    
    1059行->1081行。:  
    typedef struct  
    {  
    vu32 CR;                  //HSI,HSE,CSS,PLL等的使能  
    vu32 CFGR;              //PLL等的时钟源选择以及分频系数设定 
    vu32 CIR;                // 清除/使能 时钟就绪中断 
    vu32 APB2RSTR;      //APB2线上外设复位寄存器 
    vu32 APB1RSTR;      //APB1线上外设复位寄存器 
    vu32 AHBENR;         //DMA,SDIO等时钟使能 
    vu32 APB2ENR;       //APB2线上外设时钟使能 
    vu32 APB1ENR;      //APB1线上外设时钟使能 
    vu32 BDCR;           //备份域控制寄存器 
    vu32 CSR;             
    } RCC_TypeDef; 
    

    可以对上上面的时钟框图和RCC寄存器来学习,对STM32的时钟系统有个大概的了解   其实也就是我们上面介绍的流程,理解了自然也就能写出来

    RCC初始化:

    这里我们使用HSE(外部时钟),正常使用的时候也都是使用外部时钟

    使用HSE时钟,程序设置时钟参数流程:
    1、将RCC寄存器重新设置为默认值   RCC_DeInit;
    2、打开外部高速时钟晶振HSE       RCC_HSEConfig(RCC_HSE_ON);
    3、等待外部高速时钟晶振工作      HSEStartUpStatus = RCC_WaitForHSEStartUp();
    4、设置AHB时钟         RCC_HCLKConfig;
    5、设置高速AHB时钟     RCC_PCLK2Config;
    6、设置低速速AHB时钟   RCC_PCLK1Config;
    7、设置PLL              RCC_PLLConfig;
    8、打开PLL              RCC_PLLCmd(ENABLE);
    9、等待PLL工作          while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    10、设置系统时钟        RCC_SYSCLKConfig;
    11、判断是否PLL是系统时钟     while(RCC_GetSYSCLKSource() != 0x08)
    12、打开要使用的外设时钟      RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

    代码实现:

    对RCC的配置函数(使用外部8MHz晶振)  

    系统时钟72MHz,APH 72MHz,APB2 72MHz,APB1 32MHz,USB 48MHz TIMCLK=72M

    void RCC_Configuration(void)
    {
    	//----------使用外部RC晶振-----------
    	RCC_DeInit();			//初始化为缺省值
    	RCC_HSEConfig(RCC_HSE_ON);	//使能外部的高速时钟 
    	while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);	//等待外部高速时钟使能就绪
    	
    	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);	//Enable Prefetch Buffer
    	FLASH_SetLatency(FLASH_Latency_2);		//Flash 2 wait state
    	
    	RCC_HCLKConfig(RCC_SYSCLK_Div1);		//HCLK = SYSCLK
    	RCC_PCLK2Config(RCC_HCLK_Div1);			//PCLK2 =  HCLK
    	RCC_PCLK1Config(RCC_HCLK_Div2);			//PCLK1 = HCLK/2
    	RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);	//PLLCLK = 8MHZ * 9 =72MHZ
    	RCC_PLLCmd(ENABLE);			//Enable PLLCLK
     
    	while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);	//Wait till PLLCLK is ready
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);	//Select PLL as system clock
    	while(RCC_GetSYSCLKSource()!=0x08);		//Wait till PLL is used as system clock source
    	
    	//---------打开相应外设时钟--------------------
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//使能APB2外设的GPIOA的时钟		 
    }
    

    也就是我们时钟树框图从左到右的配置,

    时钟监视系统(CSS)

    STM32还提供了一个时钟监视系统(CSS),用于监视高速外部时钟(HSE)的工作状态。倘若HSE失效,会自动切换(高速内部时钟)HSI作为系统时钟的输入,保证系统的正常运行。

     

     

    展开全文
  • 2018.1.19 HAL库详解见STM32之HAL库详解 及 手动移植 STM32 Embedded Software   工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三...
    • 2020.2.4: 更新内容

    STM32 Embedded Software

      工作以来一直使用 ST 的 STM32 系列芯片,ST 为开发者提供了非常方便的开发库。到目前为止,有标准外设库(SPL 库)、HAL 库、LL 库 三种。前两者都是常用的库,后面的 LL 库是 ST 最近才添加,随 HAL 源码包一起提供,目前支持的芯片也偏少。各库如下所示:
    库
      其中,SPL 库 和 HAL 库两者相互独立,互不兼容。几种库的比较如下:
    库比较
      目前几种库对不同芯片的支持情况如下:
    在这里插入图片描述
      ST 中文官网上有一篇《关于ST库函数的代码性能对比》的文章,其中对比了各种库的性能如下:
    在这里插入图片描述

    STM32 Snippets

      它是代码示例的集合,直接基于 STM32 外设寄存器,可在文档和软件包中使用。由于处在最底层,因此需要开发者直接操作外设寄存器,对开发者要求比较高,通常针对于对汇编程序比较了解的资深嵌入式工程师!
      这个库使用比较少,目前只在 STM32F0 和 STM32L0 系列中有提供。两个库都有各自的说明文档。主要就是下图所示的这些:
    在这里插入图片描述
    严格来说,它不能称为库,仅仅就是将 MCU 中的寄存器进行了结构化的封装,库文件主要就是一些 .h 文件。如下是对 ADC 的封装

    /**
      * @brief Analog to Digital Converter
      */
    
    typedef struct
    {
      __IO uint32_t ISR;          /*!< ADC Interrupt and Status register,                          Address offset:0x00 */
      __IO uint32_t IER;          /*!< ADC Interrupt Enable register,                              Address offset:0x04 */
      __IO uint32_t CR;           /*!< ADC Control register,                                       Address offset:0x08 */
      __IO uint32_t CFGR1;        /*!< ADC Configuration register 1,                               Address offset:0x0C */
      __IO uint32_t CFGR2;        /*!< ADC Configuration register 2,                               Address offset:0x10 */
      __IO uint32_t SMPR;         /*!< ADC Sampling time register,                                 Address offset:0x14 */
      uint32_t   RESERVED1;       /*!< Reserved,                                                                  0x18 */
      uint32_t   RESERVED2;       /*!< Reserved,                                                                  0x1C */
      __IO uint32_t TR;           /*!< ADC watchdog threshold register,                            Address offset:0x20 */
      uint32_t   RESERVED3;       /*!< Reserved,                                                                  0x24 */
      __IO uint32_t CHSELR;       /*!< ADC channel selection register,                             Address offset:0x28 */
      uint32_t   RESERVED4[5];    /*!< Reserved,                                                                  0x2C */
       __IO uint32_t DR;          /*!< ADC data register,                                          Address offset:0x40 */
    }ADC_TypeDef;
    
    typedef struct
    {
      __IO uint32_t CCR;
    }ADC_Common_TypeDef;
    

    在实际使用时,我们就可以结构化的访问 MCU 的寄存器,如下是配置 ADC 的函数实现:

    /**
      * @brief  This function configure the ADC to convert the internal reference voltage (VRefInt)
      *         The conversion frequency is 14MHz 
      * @param  None
      * @retval None
      */
    __INLINE void ConfigureADC(void)
    {
        /* (1) Select the clock mode (refer ADC_PRESCALER definition :
             HSI14 by writing 00 in CKMODE (reset value)
             DIV2 or DIV 4 */
        /* (2) Select the auto off mode */
        /* (3) Select CHSEL17 for VRefInt */
        /* (4) Select a sampling mode of 111 i.e. 239.5 ADC clk to be greater than 17.1us */
        /* (5) Wake-up the VREFINT (only for VBAT, Temp sensor and VRefInt) */
        ADC1->CFGR2 |= ADC_PRESCALER;                                   /* (1) */
        ADC1->CFGR1 |= ADC_CFGR1_AUTOFF;                                /* (2) */
        ADC1->CHSELR = ADC_CHSELR_CHSEL17;                              /* (3) */
        ADC1->SMPR |= ADC_SMPR_SMP_0 | ADC_SMPR_SMP_1 | ADC_SMPR_SMP_2; /* (4) */
        ADC->CCR |= ADC_CCR_VREFEN;                                     /* (5) */
    }
    

    标准外设库(Standard Peripheral Libraries)

      标准外设库(Standard Peripherals Library)是对 STM32 芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的 ST 库。几乎全部使用 C 语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
    在这里插入图片描述
      相对于 HAL 库,标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了 C 函数。开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。
      相对于 STM32 Snippets,标准外设库对各外设的进行了一次封装,而不是仅仅局限在对寄存器的封装。实现了各外设的基本操作接口。
      在文档方面,我只发现了针对 F2 系列和 F3 系列的详细说明文档,如下图所示:
    在这里插入图片描述
    标准外设库的文件基本架构并不复杂。下图显示了 STM32F10xx 标准外设库文件的基本架构
    在这里插入图片描述
    其他系列的库文件结构和上图基本都是一致的!
      ST 为各系列提供的标准外设库稍微有些区别。例如,STM32F1x 的库和 STM32F3x 的库在文件结构上就有些不同,此外,在内部的实现上也稍微有些区别,这个在具体使用(移植)时,需要注意一下!但是,不同系列之间的差别并不是很大,而且在设计上是相同的。STM32 的标准外设库涵盖以下 3 个抽象级别:

    • 包含位,位域和寄存器在内的完整的寄存器地址映射
    • 涵盖所有外围功能(具有公共API的驱动器)的例程和数据结构的集合。
    • 一组包含所有可用外设的示例,其中包含最常用的开发工具的模板项目。

      关于更详细的信息,可以参考 ST 的官方文档,文档中对于标准外设库函数命名、文件结构等都有详细的说明。

    STM32Cube

      ST 为新的标准库注册了一个新商标:STMCube™。并且,ST专门为其开发了配套的桌面软件 STMCubeMX,开发者可以直接使用该软件进行可视化配置,大大节省开发时间。
    在这里插入图片描述
      这其中就包含了 HAL 库和最近新增的 LL 库。如下图:
    STM32Cube
      从上图不难看出,LL 库和 HAL 库两者相互独立,只不过 LL 库更底层。而且,部分 HAL 库会调用LL库(例如:USB驱动)。同样,LL 库也会调用 HAL 库
      用户可以使用 STMCubeMX 直接生成对应芯片的整个项目(目前主流开发工具的项目基本全支持),STMCubeMX 负责给整理各种需要的源码文件。

    注意:
      1. 个人感觉STMCubeMX生成的项目并不够简洁,源码的组织结构也并不是很好。
      2. STMCubeMX在生产项目时,可以选择使用HAL库或者LL库。但是部分组件的HAL库会调用LL库

    HAL 库

      HAL是 Hardware Abstraction Layer 的缩写,中文名:硬件抽象层。HAL 库是 ST 为 STM32 最新推出的抽象层嵌入式软件,可以更好的确保跨 STM32 产品的最大可移植性。该库提供了一整套一致的中间件组件,如 RTOS,USB,TCP/IP 和 图形 等。
      HAL 库是基于一个非限制性的 BSD 许可协议(Berkeley Software Distribution)而发布的开源代码。 ST 制作的中间件堆栈(USB 主机和设备库,STemWin)带有允许轻松重用的许可模式, 只要是在 ST 公司的 MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。
      作为目前 ST 主推的外设库,HAL库相关的文档还是非常详细的。
    在这里插入图片描述
      可以说HAL 库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL 库表现出更高的抽象整合水平,HAL API 集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如 F7 系列。目前,HAL库已经支持STM32全线产品。

      使用HAL库编程,最好尽量符合HAL库编程的整体架构。关于HAL库的详细介绍,可以参考后文 STM32 HAL库详解 及 手动移植

    LL 库

      LL库(Low Layer)是 ST 最近新增的库,与 HAL 库捆绑发布,文档也是和 HAL 库文档在一起的,比如:在STM32F3x 的 HAL 库说明文档中,ST 新增了LL库这一章节,但是在 F2x 的HAL文档中就没有。
      LL 库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。使用方法:

    • 独立使用,该库完全独立实现,可以完全抛开 HAL 库,只用LL库编程完成。在使用STM32CubeMX生成项目时,直接选LL库即可。如果使用了复杂的外设,例如 USB,则会调用 HAL 库
    • 混合使用,和 HAL 库结合使用。

    目前,CubeMX 在生成项目时,可以选择采用 LL 库。

      LL 库文件的命名方式和 HAL 库基本相同。个人感觉,LL 库就是原来的标准外设库移植到 Cube下的新的实现,但是其实现方法更加高效、简洁。使用 LL 库编程和使用标准外设库的方式基本一样,但是确会得到比标准外设库更高的效率。

    更详细的介绍,请参见博文《STM32 之十一 LL 库详解 及 移植使用说明

    参考

    1. STM32 Embedded Software Overview.pdf
    2. STM32库函数性能对比.pdf
    3. STM32F0xx Snippets firmware package.pdf
    展开全文
  • STM32延时函数的四种方法

    万次阅读 2020-06-12 10:01:15
    本文基于STM32F207介绍4种不同方式实现的延时函数。 1、普通延时 这种延时方式应该是大家在51单片机时候,接触最早的延时函数。这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,在某些...
  • STM32STM32 CubeMx使用教程一--安装教程

    万次阅读 多人点赞 2019-08-09 09:01:48
    一、STM32CubeMX 简介 1、STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高...
  • STM32】HAL库 STM32CubeMX教程六----定时器中断

    万次阅读 多人点赞 2019-08-13 09:10:04
    是我们学习STM32最频繁使用到的外设之一,所以一定要掌握好,这节我们讲解定时器中断,本系列教程将对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片:...
  • STM32F4与STM32F1的区别

    万次阅读 2017-01-09 13:17:41
    作为Cortex M3市场的最大占有者,ST公司在2011年又推出基于Cortex M4内核的STM32F4系列产品,相对与STM32F1/F2等Cortex M3产品,STM32F4最大的优势,就是新增了硬件FPU单元以及DSP指令,同时,STM32F4的主频也提高了...
  • STM32CubeMX介绍、下载与安装

    万次阅读 多人点赞 2016-08-16 22:52:55
    推荐 分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来...相信很多人都知道STM32CubeMX这个工具,也是近年来开发STM32比较流行的一个工具。这个工具从两年...
  • STM32】串口通信基本原理(超基础、详细版)

    万次阅读 多人点赞 2018-04-12 13:26:02
    STM32F1xx官方资料: 《STM32中文参考手册V10》-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是: 并...
  • STM32】HAL库 STM32CubeMX系列学习教程

    万次阅读 多人点赞 2020-02-07 09:15:30
    STM32CubeMX 简介 1、STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高...
  • 携手STM32CubeMX玩转STM32

    千人学习 2019-04-19 09:30:00
    本课程教大家如何利用STM32CubeMX玩转STM32STM32CubeMX支持的所有型号MCU都适用于本课程)。课程内容分为基础内容和扩展内容,例如:讲解串口时会扩展开讲Xmodem通信协议,讲解ADC/DAC时会扩展讲傅里叶计算,讲解...
  • STM32F103入门 | 1.STM32F103介绍

    万次阅读 多人点赞 2018-12-30 10:35:32
    STM32F1入门学习将使用STM32F103C8T6开发板最小系统板。小R为什么选择它来入门呢?咳咳~首先,ST官方提供强大且易用的标准库函数,使得开发过程方便快捷;其次,网上的教程资料多也十分详细。所以呢,它对高校学生和...
  • STM32 之二 HAL库详解 及 手动移植

    万次阅读 多人点赞 2017-02-15 18:41:23
      说到STM32的HAL库,就不得不提STM32CubeMX,其作为一个可视化的配置工具,对于开发者来说,确实大大节省了开发时间。STM32CubeMX就是以HAL库为基础的,且目前仅支持HAL库及LL库!首先看一下,官方给出的HAL库的...
  • STM32】使用STM32提供的DSP库进行FFT(附详细代码)

    万次阅读 多人点赞 2019-05-12 15:42:41
    最近,因为项目需要在STM32F103系列处理器上,对采集的音频信号进行FFT运算,然而STM32F103毕竟不是STM32F4系列的处理器,对于一般的FFT运算程序还是比较缓慢的。 幸亏官方提供了针对FFT的官方库,但是去官网找了...
  • KEIL 5 pack离线包 Stm32f1/f2/f3/f4

    万次阅读 多人点赞 2018-08-13 15:43:42
    keil5 pack 离线包安装:安装过keil5软件后,...F1pack包https://keilpack.azureedge.net/pack/Keil.STM32F1xx_DFP.2.3.0.pack F2pack包https://keilpack.azureedge.net/pack/Keil.STM32F2xx_DFP.2.9.0.pack F3pa...
  • STM32 60个实用案例分享

    万次阅读 多人点赞 2019-03-04 17:01:19
    STM32 60个案例 留联系方式资料免费送
  • STM32】HAL库 STM32CubeMX教程七---PWM输出(呼吸灯)

    万次阅读 多人点赞 2019-08-14 15:26:21
    前言: 本系列教程将 对应外设原理,HAL...1、芯片:STM32F407ZET6/STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: PWM工作原理 ...
  • STM32 GPIO详解

    万次阅读 多人点赞 2020-07-10 13:52:57
    下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。 01、I/O接口电路 带FT的是说明可以容忍5V电压的,I/O电路框图 1.1、普通输入 普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式 浮空输入...
  • 在Keil官网上下载PACK包速度特别慢,为方便大家下载STM32的PACK包, 特将STM32所有系列的PACK上传至网盘供大家下载,点击下载普通下载即可, 后面会持续更新。 点击下方型号快速定位下载,附更新记录Keil.STM32F0...
  • STM32】5分钟了解STM32的串口通信

    千次阅读 多人点赞 2020-08-21 10:18:28
    串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。文章主要是串口通信简介和STM32的串口通信。
  • 在2018年3月份,本人写下了一篇博文《几种STM32开发IDE的比较与选择》,当时ST公司已经收购了Atollic公司,TrueSTUDIO 9.0变成一个免费的STM32开发IDE工具。当时本人就预见TrueSTUDIO +STM32CubeMX必将是ST公司大力...
  • stm32f10x.h 固件库stm32f10x.h中有如下解释#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM...
  • STM32F103C8T6最小系统

    万次阅读 多人点赞 2019-07-09 23:25:17
    单片机最小系统一般有晶振电路、电源电路、复位电路以及调试电路组成。本文以STM32F103C8T6为例,介绍最小电路的设计和要注意的问题。
  • STM32学习 基于STM32F103C8t6

    千次阅读 多人点赞 2019-03-22 23:00:15
    STM32学习 基于STM32F103C8t6 STM32F103C8t6命名规则 先对自己使用的芯片命名有所了解,才能更好的宏观掌控 STM32F103C8t6引脚命名
  • STM32F429】通过STM32CubeMX移植TouchGFX

    万次阅读 多人点赞 2019-07-23 10:50:34
    1.通过STM32CubeMX从零驱动STM32F429,并创建一个TouchGFX工程 2.更改代码,添加驱动 3.使用TouchGFX MVP来实现和硬件的双向交互 4.通过STM32CubeMX添加SD、USB和FAFT组件 5.通过STM32CubeMX添加CAN,实现汽车...
  • STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer1 资源概述2.MDK软件下载介绍3 STM32 ST-LINK Utility介绍4 STM32CubeProgrammer5 官方正版STLINK仿真器 1 资源概述 开发板:正点...
  • STM32】使用STM32cubeMX的库读写FLASH数据

    万次阅读 多人点赞 2016-10-17 12:03:43
    做项目时有时候需要对一些数据进行掉电可存储,一般来说可以把这些数据存储到到EEPROM或FLASH,这次项目中我使用到的芯片是STM32F051C8T6,只有64KB的FLASH,没有EEPROM。这个时候就需要考虑FLASH的读写操作。
  • 在Keil官网上下载PACK包速度特别慢,为方便大家下载STM32的PACK包, 特将STM32所有系列的PACK上传至网盘供大家下载,点击下载即可, 下载后将扩展名改为.pack双击安装即可,官网更新后我会进行更新。 Keil.STM32...
  • sw4stm32开发stm32

    万次阅读 2018-06-10 16:08:00
    sw4stm32开发stm32 作为开发stm32最常用的IDE就是MDK和IAR,然后这两款IDE是付费的,同时仅仅能在windows平台上使用,为了能打破这一限制有些人使用了Eclipse+gcc搭建了stm32的开发环境,其过程较为复杂。现在st...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 132,145
精华内容 52,858
关键字:

stm32