STM32 MCUs 技术知识点合集

1 篇文章 0 订阅
0 摘记
   0.1 SMPS(开关电源)提供电源
        选择MCU时一定要注意是否支持SMPS 电源供应,因为同型号同封装的MCU,支持SMPS和不支持的 PIN map有细微差,不完全兼容
   0.2 各mcu datasheet的 ordering information 都有详细选型代码,标明是否支持SMPS
   0.3 大部分同封装同pin数的mcu基本满足pin对pin兼容(GPIO,io复用功能或有不同),但要 注意SMPS支持与否
       0.3.1 比如 同pin数LQPF封装的stm32f10xx stm32f4xx  stm32L4x1~x6 ,R5/7, S5/7 基本都兼容,
               但是R9和S9 因为支持camera就与前者有些许不兼容的地方。
       0.3.2 这仅是对gpio而言,复用功能和特定功能没有考虑在列。
   0.4 stm 系列的mcu , BOOT1 一般都是 PB2
   0.5 NVIC 和 SCB 的教程 atk的 《StM32F429 FreeRTOS 开发手册》 的4.1 章节
       0.5.1 STM32 家族的MCU,  抢占优先级+次级优先级 合并 设定占  4bit 
               查询文件  stm32xxxx.h   //  xxxxx---> mcu具体型号   
                
       0.5.2 不同厂商的 mcu,NVIC  抢占优先级+ 次级优先级  自我设定
   0.6 __MPU : 内存保护单元
   0.7 自设文件,自定义项解析
       0.7.1  global_def.h :          定义供所有mcu,所有项目使用公共宏
                 bsp_glbtree_xxx.h : 定义仅供指定开发平台使用的公共宏,如 _pdra,表示这些宏仅供Pandora 开发平台使用
                 mcu_sys_head.h   :设置仅供本项目使用到的头文件 ,设备和变量等
         0.7.2   BSP_BD_xx   : 一般针对 开发平台 on board 板载的项
                  BSP_EX_xx :       一般针对  开发平台 outside  board  板外扩展的
                  BSP_xxx_xC:     核心板板载
                   BSP_xxx_xM:    底板主板板载
                  MCU_xx      :     针对 MCU内部设备
        0.7.3 GPIO文件
               0.7.3.1 MCU_GPIO  MCU各接口模块的gpio配置api
        0.7.4
   0.8 关于 M4和M4F
         第三方厂商会根据自己的产品线增加或裁剪 arm 给定的 cortex m核 内模组
         带FPU(浮点数运算单元) 的 是 M4F; 不带的是 M4
         当然这并不是严格规定的,stm带fpu 的 mcu ,有的资料标注是M4 ,有些则标注的是M4F
   0.9  关于编译工具的宏定义
       0.9.1  __CC_ARM   ---> ARM Realview MDK
       0.9.2  __ICCARM__ ---> IAR EWARM
       0.9.3  __GNUN__    --->  GNU Compiler Collection
   0.10  stm32xxxx.h(如stm32l4xx.h#237) 的   #define  POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL)))
                   http://www.openedv.com/thread-94750-1-1.html
       0.10.1   POSITION_VAL ---》获取VAL值的最高位位数
       0.10.2  
   0.11 如果使用了 rtos,尽量不要频繁反复触发mcu的硬件中断(红外遥控就依赖硬件定时器的中断去扫描接收器,捕获信号)
   0.12
1  SysTick 时钟配置,基于HAL库 :xxxx_hal_cortex.c
  1.0  HAL_Init()执行时就执行使能了 systick时钟的程序,并装载了一个默认值,一直反复循环倒计时。
        具体是 core_cm4.h中的内部api :SysTick_Config()
       
     
  1.1 Systick底层寄存器结构体(core_cmx.h)
       
 
     
       下图是野火《零死角玩转stm32》p152; 要注意的是《cortex-m3权威指南》p134页截取 ,  该资料systick控制及状态寄存器的bit2的解释有误
       
      
 1.2 时钟
    1.2.0 来源
            SysTick的时钟<----HCLK or HCLK/8<-----AHB<-----SYSCLK(mcu主频)
    1.2.1 时钟选择 api (xxxx_hal_cortex.c)选择全频HCLK或者HCLK/8
          
     
     1.2.2 参数 (xxxx_hal_cortex.h)
           
 
     1.2.3 说明
           SysTick->CTRL 的bit2 决定systick的时钟源来自哪里
           1.2.3.1  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); 
                      表示取stm32 的HCLK (stm32f429的HCLK)
           1.2.3.2 HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);     
                      表示取stm32 的HCLK/8  (HCLK是72MHz,systick的时钟就是9MHz)
     1.2.4 注意, stm32中文参考手册_v10.pdf p56 时钟树对systick的时钟源解释的有误,
     
      
  1.3 底层systick产生中断的 时基 api:SysTick_Config(uint32_t ticks)的使用。(core_cmx.h)
       
      该api 默认使用的是mcu主频时钟,并开启了systick中断服务
 
       以stm32f429,180MHz主频为例,systick->val 减小1,耗时 1/180 us
       如果要设置1us的中断时基,那么形参 ticks = 180;SysTick_Config(180) 就等于每1us产生一次中断
       如果要设置1ms的中断时基,那么形参 ticks = 180000;SysTick_Config(180000) 就等于每1ms产生一次中断
     
  1.4  
  1.5
 
2  stm32的启动模式(以stm32f429为例)
   2.0 信息
      2.0.1  参考资料《野火零死角玩转stm32f429》 p1002 第52章节
 
   2.1 基本知识
      2.1.1 图解
              
      2.1.2 用户闪存启动,就是从mcu的内部flash启动,这是最常用的方式 
      2.1.3 系统存储器 启动 boot0/1 = (1,0)常用于 串口下载
              下载软件
              
              注意! F429的mcu不要使用这个软件下载
             下载完程序后 把 boot0/1 调整到(0,x),然后按复位键,程序才启动
      2.1.4 从mcu内嵌sram启动,一般用于调试
   2.2  
3 中断系统
   3.1  前述
       3.1.1  web
       3.1.2
   3.2 NVIC 
       3.2.0  前述
            3.2.0.1   armv7-m 抢占优先级+次级优先级 设置位宽 最高 是  8bit 
                        但是 STM32 MCUs,  抢占优先级+次级优先级 设置位宽是   4bit 
                           查询文件   stm32xxxx.h   //  xxxxx---> mcu具体型号   
                    
            3.2.0.2   armv7-m 最多可以设置 8个 nvic group;
                        但是 stm32 mcu 只有 4 个 NVIC_PRIORITYGROUP,
                        NVIC_PRIORITYGROUP_ x  由  SCB->AIRCR[10:8]  决定;
       3.2.1  三要素:组 NVIC_PRIORITYGROUP_x;          抢占优先级 ;        响应优先级(次级优先级)  
                             NVIC_PRIORITYGROUP_0                        0                      0~15
                             NVIC_PRIORITYGROUP_1                       0,1                     0~7
                             NVIC_PRIORITYGROUP_2                       0~3                     0~3
                             NVIC_PRIORITYGROUP_3                       0~7                     0,1
                             NVIC_PRIORITYGROUP_4                       0~15                  0
            优先顺序       0 > 1 …> 4                                    0 > 1 …> 15              0 > 1 …> 15
            
      3.2.2 原则:
           3.2.2.1 对于多cortexm核心的 stm32 mcu而言,组最优先,高组可以抢低阻;
           3.2.2.2 同组高抢占可以抢占低抢占(可嵌套);同组同抢占级,高响应的先执行,低的后执行,
           3.2.2.3 高响应级 不能抢占低响应(不可嵌套),要等待上一个执行完毕才可执行。
      3.2.3  对于加入了FreeRTOS的pjt 而言,NVIC group 只能设置为  NVIC_PRIORITYGROUP_4
   3.3
4 SCB :System Control Block
   4.1 前述
        4.1.1  相关定义所在文件  core_cmx.h    
               
              
                
                
                  对  SCB->AIRCR  或  0x05fa0004  将会 强行复位 MCU
        4.1.2  
        4.1.3 
   4.2 
5
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值