标准外设库--->HAL库--->LL库,其中寄存器的优点是代码量少,标准外设库可移植性强,HAL库和LL库虽然代码量少于标准外设库和固定平台的可移植性增强,但是在跨平台的可移植性大大降低,各平台的兼容性差,并且STM32Cube平台有些臃肿,我鉴于学习时间和未来的跨平台考虑,选择了标准外设库。">

加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • botiantang注册开户
    • botiantang官网平台
    • Led.h
    • Led.c
    • main.c
  • 博天堂918网址彩票
  • 博天堂918网址老虎机
  • botiantang注册网站
申请入驻 产业图谱

botiantang最新网址 跑马灯实验和我为什么使用库函数?

2023/05/08
2618
阅读需 13 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

希望读者能点赞,互动,分享,让我更有动力,等我彻底写完stm32的学习日志,我会制作成电子书,分享给大家。

botiantang注册开户

截至2020年8月28日,ST公司一共开发了三个库,分别是标准外设库(STD),HAL库,LL库,此前使用直接控制寄存器的方式控制微处理器,从开发时间上是寄存器--->标准外设库--->HAL库--->LL库,其中寄存器的优点是代码量少,标准外设库可移植性强,HAL库和LL库虽然代码量少于标准外设库和固定平台的可移植性增强,但是在跨平台的可移植性大大降低,各平台的兼容性差,并且STM32Cube平台有些臃肿,我鉴于学习时间和未来的跨平台考虑,选择了标准外设库。

下面开始正文:


botiantang官网平台

重要翻译:

Reset Clock Controller ——RCC寄存器(复位时钟控制器寄存器)

步骤:

  1. 确定stm32中的所需引脚的连接
    1. LED0-PB5
    2. LED1-PE5
  2. 确定使用库函数
    1. 头文件
      1. Stm32f10x_gpio.h
      2. Stm32f10x_rcc.h
    2. 源文件
      1. Stm32f10x_gpio.c
      2. Stm32f10x_rcc.c
    3. 一般常见库函数重要函数:
      1. 1个初始化函数:
 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);  

作用:

初始化一个或者多个IO口(同一组)的工作方式和速度。该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器

GPIOx: GPIOA~GPIOG

这里的 GPIO_InitTypeDef* GPIO_InitStruct为:

 typedef struct { uint16_t GPIO_Pin;  

GPIO_Init函数初始化样例:

  GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  
  1. 2个读取输入电平函数:
 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。  

例如:

 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);  

作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。

例如:

  GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有io口输入电平  
  1. 2个读取输出电平函数:
 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); uint8_t GPIO_ReadOutputDataBit (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);  

作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。

例如:

  GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输出电平 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);  

作用:读取某组GPIO的输出电平。实际操作的是GPIO_ODR寄存器。

例如:

  GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平  
  1. 4个设置输出电平函数:
 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);  

作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器

 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);  

作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。

 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);  

这两个函数不常用,也是用来设置IO口输出电平。

  1. 编程

文件结构图:

文件结构图

硬件编程:

Led.h

 #ifndef __LED_H #define __LED_H  

Led.c

 #include "led.h" #include "stm32f10x.h" RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  

main.c

 #include "led.h" #include "delay.h"  

添加头文件路径,设置obj路径,添加target文件夹和头文件,源文件

按照上面的步骤设置,就可以完成最简单的跑马灯实验。

博天堂918网址彩票

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ADM3053BRWZ-REEL7 1 Analog Devices Inc Signal and Power Isolated CAN Transceiver with Integrated Isolated DC-to-DC Converter

ECAD模型

下载ECAD模型
$12.3 查看
AFBR-710SMZ 1 Broadcom Limited Fiber Optic Transceiver,
$49.96 查看
LTC6904CMS8#TRPBF 1 Linear Technology LTC6904 - 1kHz - 68MHz Serial Port Programmable Oscillator; Package: MSOP; Pins: 8; Temperature Range: 0°C to 70°C
暂无数据 查看

博天堂918网址老虎机

botiantang注册网站