STM32F1 - 标准外设库_规范


1> 外设驱动

1

ST公司为STM32F103中所有的外设,都编写了1个.c和.h的驱动文件

先学会用他,再研究研究他是怎么个事,
最后用用他的套路,写写开发板的外设比如LED,按键,液晶屏等


2> 头文件包含关系

3

1个头文件stm32f10x.h 就把整个MCU以及标准外设库,就管理了;


3> .c文件内部结构

/**
  ******************************************************************************
  * @file    Project/STM32F10x_StdPeriph_Template/stm32f10x_it.c 
  * @author  MCD Application Team
  * @version V3.6.0
  * @date    20-September-2021
  * @brief   Main Interrupt Service Routines.
  *         
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
【段】文件头注释


/* Includes -------------------------------*/
【段】包含头文件
/* Private typedef ------------------------*/
【段】内部类型重命名
/* Private define -------------------------*/
【段】内部宏定义
/* Private macro --------------------------*/
【段】内部预处理,宏函数
/* Private variables ----------------------*/
【段】内部变量定义
/* Private function prototypes ------------*/
【段】内部函数声明
/* Private functions ----------------------*/
【段】函数实现


4> 宏定义位置

有些宏定义在.c文件中,有些在 .h文件中,没规律吗?

例如:

// stm32f10xx_gpio.c:
#define MAPR_OFFSET   (AFIO_OFFSET + 0x04)
// stm32f10xx_gpio.h:
#define GPIO_Pin_0      ((uint16_t)0x0001)

如果宏定义只用在自己的.c文件中,定义到.c文件中,
如果要被其他文件用,就定义在.h文件中;


5> 位掩码bit mask

4

时钟控制寄存器RCC_CR的bit18【HSEBYP】

// 文件 stm32f10x_rcc.c
// 位掩码定义
#define CR_HSEBYP_Reset           ((uint32_t)0xFFFBFFFF) // bit18 == 0;
#define CR_HSEBYP_Set             ((uint32_t)0x00040000) // bit18 == 1;	

位掩码使用:

 /* Set HSEBYP */
 RCC->CR |= CR_HSEBYP_Set;
  
 /* Reset HSEBYP bit */
 RCC->CR &= CR_HSEBYP_Reset;

ST公司工程师为了不进行移位操作,定义好位掩码;
比如,

想要让CR寄存器的bit18等于1,就 |= 0x00040000;
想要让CR寄存器的bit18等于0,就&= FFFBFFFF;

往后,咱也用用这招;


6> .c文件中定义私有变量

文件 stm32f10x_rcc.c
/** @defgroup RCC_Private_Variables
  * @{
  */ 
static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9};
static __I uint8_t ADCPrescTable[4] = {2, 4, 6, 8};

static原来这样使啊!Private /ˈpraɪvət/


7> 枚举类型定义

typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;

ErrorStatus RCC_WaitForHSEStartUp(void)
{
  __IO uint32_t StartUpCounter = 0;
  ErrorStatus status = ERROR;
  FlagStatus HSEStatus = RESET;
  
  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY);
    StartUpCounter++;  
  } while((StartUpCounter != HSE_STARTUP_TIMEOUT) && (HSEStatus == RESET));
  
  if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET)
  {
    status = SUCCESS;
  }
  else
  {
    status = ERROR;
  }  
  return (status);
}

枚举类型,就是给参数画个圈,固定几个数;
最大的好处就是,传递的参数明确,如果传错,编译时就会报错,
让你及时发现错误


8> 注释风格

采用“Doxygen”的注释规范,方便Doxgen软件自动根据注释生成帮助文档

/**
  * @brief  Checks whether the specified RCC flag is set or not.
  * @param  RCC_FLAG: specifies the flag to check.
  *   
  *   For @b STM32_Connectivity_line_devices, this parameter can be one of the
  *   following values:
  *     @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready
  *   
  * @retval The new state of RCC_FLAG (SET or RESET).
  */
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG){}

9> 函数命名规律


9.1> 初始化函数 Init

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

模块名_Init ( 模块名_InitTypeDef * )


9.2> 使能模块函数 Cmd

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);

模块名_xxxCmd(FunctionalState)


9.3> 使能模块中断 ITConfig

void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);
void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState);

### 回答1: stm32cube_fw_f1_v1.8.0.zip是针对STM32F1系列微控制器的软件包。STM32F1是意法半导体公司推出的一款低功耗高性能微控制器,具有广泛的应用领域,包括消费电子、工业自动化、医疗设备等。stm32cube_fw_f1_v1.8.0.zip中包含了STM32F1系列微控制器的固件以及软件开发工具(例如STM32CubeMX和System Workbench for STM32等),可以帮助开发者快速、高效地进行STM32F1系列微控制器的开发。同时,在stm32cube_fw_f1_v1.8.0.zip中也提供了丰富的应用代码和应用示例,方便开发者快速上手和开发出符合自己需求的产品。综上所述,stm32cube_fw_f1_v1.8.0.zip是一款非常有用的软件包,对于开发STM32F1系列微控制器的应用具有非常重要的作用。 ### 回答2: stm32cube_fw_f1_v1.8.0.zip是一种针对ST微电子F1系列微控制器的软件包。它包含了一系列用于开发F1微控制器的工具和驱动程序,可以用于快速开发高性能应用程序。 这个软件包是ST微电子公司发布的,旨在提供一个全面的解决方案,以便开发人员能够更快、更方便地开始使用STM32微控制器。其中包括各种硬件抽象层及其应用程序接口(HAL API),运行时环境(RTOS)和示例代码等。 通过这个软件包,开发人员可以更快地启动、运行和调试STM32微控制器,同时也可以使代码更加可读和易于维护。此外,该软件包的组件还可以与其他基于STM32芯片的应用程序进行集成,以实现更加高效地资源利用和更好的性能。 总之,stm32cube_fw_f1_v1.8.0.zip是一个用于开发STM32微控制器的完整解决方案,开发人员可以利用其中的多种工具和驱动程序,更快地开发高性能的应用程序。 ### 回答3: stm32cube_fw_f1_v1.8.0.zip是一款针对STMicroelectronics STM32 F1系列微控制器的固件包。该固件包由STMicroelectronics官方提供,并包含了许多驱动、应用程序代码和示例,可以帮助开发人员快速搭建功能强大的STM32 F1系列应用程序。 该固件包支持多种开发环境,包括Keil MDK-ARM、IAR EWARM和GCC等。通过使用该固件包,开发人员可以利用STM32 F1系列微控制器的高性能和丰富的外设资源,快速构建各种嵌入式应用,如工业控制、医疗设备、消费电子等。 除了代码和示例外,该固件包还包括标准外设、USB、协议栈和中间件等,为开发人员提供了一整套完整的解决方案。此外,该固件包还支持对设备的低功耗模式进行管理,进一步优化了系统的功耗和性能表现。 总之,stm32cube_fw_f1_v1.8.0.zip是一款功能强大的STM32 F1系列微控制器固件包,帮助开发人员快速构建高性能的嵌入式应用程序,同时保证系统的可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值