当前位置: 首页 > article >正文

STM32开发方式

1.1 寄存器开发

学过51单片机的同学应该知道,51单片机教程都是讲解的寄存器开发,但是这种开发方式对于STM32就变得比较困难,因为STM32的寄存器数量是51单片机的十数倍如此多的寄存器根本无法全部记忆, 开发时需要经常的翻查芯片手册(找到对应的寄存器,在特定的比特位写入对应的值),直接操作寄存器就变得非常的费力了。但还是会有很小一部分人,喜欢去直接操作寄存器,因为这样更接近原理,知其然也知其所以然。

//基本流程 
//1.需求 通过gpio点亮LED2
//2.根据原理图-->对应的管脚 PC13
//3.根据芯片手册-->找到控制该管脚的相关寄存器 
       RCC_APB2ENR [4] = 1;  
       0x40021000+0x18
       GPIOC_CRH [23:20] = 0b 0010  //输出 2mhz 通用推挽
       0x40011000+0x4
       GPIOC_ODR [13]  = 0;   //输出低电平
       0x40011000+0xc
    
            
//4.编程实现
#define RCC_APB2ENR *(volatile unsigned int *)0x40021018
#define GPIOC_CRH   *(volatile unsigned int *)0x40011004    
#define GPIOC_ODR   *(volatile unsigned int *)0x4001100C    
int main(void)
{
    RCC_APB2ENR |= (0X1<<4);
           
    GPIOC_ODR |= (0X1<<13);   
    GPIOC_CRH &= ~(0XF<<20);
    GPIOC_CRH |= (0X2<<20);
    
    while(1){
        GPIOC_ODR &= ~(0X1<<13);  //低电平 点亮
        mydelay(1000);
        GPIOC_ODR |= (0X1<<13);   //高电平 熄灭
        mydelay(1000);
    }
}    

1.2 标准库

STM32有非常多的寄存器从而导致开发困难,所以为此ST公司就为每款芯片都编写了一份库文件,也就是工程文件里stm32f10x_xxx.c 和stm32f10x_xxx.h。开发者可以调用库里面的函数接口来配置STM32的寄存器以实现各种功能,这种方式使得开发人员不用直接去操作寄存器,提高了开发速度,代码更具可读性,方便维护。这也是目前最多人使用的方式。
//示例:
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能时钟
     //管脚的初始化
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;        //pin13
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  //低速
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
    GPIO_Init(GPIOC,&GPIO_InitStructure);
        
     while(1){
        GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET); //低电平 点亮
        mydelay(1000);
        GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);  //高电平 熄灭
        mydelay(1000);
     }

1.3 HAL库

HAL库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序的开发时间。HAL的集成度更高,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F3上开发的程序移植到F4上是不能通用的,而使用HAL库可以实现。而且使用ST公司研发的STMcubemx软件,可以通过图形化方式进行功能配置(更加方便),直接生成整个使用HAL库的工程文件,可以说是方便至极,但是方便的同时也造成了它执行效率的低下。

1.4 LL库

LL库,即STM32Cube Low-Layer,也叫Cube LL、Cube底层库。早在2014年,ST推出了STM32CubeMX这款工具,同步推出了对应的STM32Cube HAL库。但是,HAL存在一些问题:代码量大、执行效率低等缺点。因此,在2017年,ST推出了STM32Cube LL库,目的就是为了解决的HAL库的缺点,让开发STM32的工程师有更多的选择。

在这里插入图片描述


http://www.kler.cn/a/562018.html

相关文章:

  • 【Python爬虫(71)】用Python爬虫解锁教育数据的奥秘
  • 安装VM和Centos
  • 前端(layui表单对应行颜色、登陆页面、轮播)
  • Spring三级缓存解密:循环依赖破局之道
  • H13-821 V3.0 HCIP 华为云服务架构题库
  • 「软件设计模式」命令模式(Command)
  • Crack SmartGit
  • 使用虚拟IP会封号吗?静态IP上网速度会不会比动态IP更快?
  • 《苍穹外卖》电商实战项目(java)知识点整理(P1~P65)【上】
  • 6.将cr打包成网络服务|使用postman进行测试|编写oj_server的服务路由功能(C++)
  • 《白帽子讲Web安全》学习:深入解析Cookie与会话安全
  • 玩机日记 14 飞牛fnOS部署qBittorrent、AList、Jellyfin,实现下载、存取、刮削、观看一体的家庭影音中心
  • 【Python爬虫(55)】Scrapy进阶:深入剖析下载器与下载中间件
  • 物理服务器如何保障数据的安全性?
  • Qt常用控件之单行输入框QLineEdit
  • Vue进阶之AI智能助手项目(四)——ChatGPT的调用和开发
  • 在Linux、Windows和macOS上部署DeepSeek模型的最低配置要求
  • 2021Java面试-基础篇
  • STM32【3】芯片的底层组成概论
  • Kafka可视化工具EFAK(Kafka-eagle)安装部署