Image
Image

结合国际经验

+ 关注

粉丝 1     |     主题 64     |     回帖 773

STM32实战总结:HAL之GPIO
2023-12-28 08:55
  • ST MCU
  • 49
  • 1792
  #include "myapplication.h" static void LedLight(uint8_t lednum); static void LedExtinguish(uint8_t ...  
  接着,在对应的c中,定义一个结构体全局变量(相应的在头文件中要声明出去),这个变量就作为一个对接人, ...  
  #ifndef _LED_H_ #define _LED_H_ #include "stdint.h" //确定要实现的led功能 typedef struct { / ...  
  思路如下: 为LED外设单独创建一个文件; 创建LED.c和LED.h,放到MyApplications中; 在myapplication.h ...  
  GPIO模块化编程 单片机的封装通常都是分层的。 怎么说呢? 首先,底层针对寄存器的读写时序是第一层; ...  
  根据英文注释不难看出来每个代码是干嘛的。 一直往下追踪,可以发现,其实底层都是对相关寄存器进行操作。 ...  
  再跳转到对应c中去看定义: HAL_StatusTypeDef HAL_Init(void) { /* Configure Flash prefetch */ #if ( ...  
  可知,其返回一个什么,可查看到返回的是一个状态码,该状态码是个枚举类型,定义在头文件stm32f1xx_hal_de ...  
  HAL_Init(); 看名称就知道是HAL库的初始化,那么HAL库的初始化要做哪些事情呢? 先看声明: 跳转打开了s ...  
  再回过头看看stm32f103xe.h的功能说明: * @file stm32f103xe.h * @author MCD Application Team ...  
  这是一个结构体,定义了GPIO每个端口的寄存器。 因为,结构体的指针,指向的是首元素的首地址,所以,上面 ...  
  typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; ...  
  0x4000 0000 - 0x4000 03FF TIM2定时器 可知,起始地址为:0x4000 0000 上面的地址经过相加,可得出 ...  
  涉及到基地址加上一个数,联想到基地址加偏移量,又提到了别名区,难道是位带操作? 具体查找数据手册,看 ...  
  继续查找PERIPH_BASE #define PERIPH_BASE 0x40000000UL /*!< Peripheral base address in the a ...  
  可知,被转换的好像是个地址,一个基地址再加上一个数,继续查找基地址: #define APB2PERIPH_BASE ...  
  该宏定义替换后,是后面的内容,看起来像是把一个宏定义内容进行强制类型转换,那么,被转换的是什么呢?又 ...  
  这好像是所有外设的什么声明,具体看: 以GPIOE为例 #define GPIOE ((GPIO_TypeDef *)GPIO ...  
  看其描述: /** @addtogroup Peripheral_declaration * @{ */  
  …… /* exact-width unsigned integer types */ typedef unsigned char uint8_t; typedef unsign ...  
2
3
近期访客