stm32 总结 - 各基本功能的库函数配置过程查询

一、配置步骤

GPIO

  • 头文件:stm32f4xx_gpio.h
  • 源文件:stm32f4xx_gpio.c
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟
  // GPIOF初始化设置
  .....
  // 初始化  
  GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF9,F10

NVIC

// 1. 系统运行后先设置中断优先级分组。调用函数:
/* 注:整个系统执行过程中,只设置一次中断分组 */
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
// 2. 针对每个中断,设置对应的抢占优先级和响应优先级:
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
// 3. 如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可

UART 串口通信

// 1. 串口和gpio时钟使能
RCC_APBxPeriphClockCmd();  // 串口时钟使能
RCC_AHB1PeriphClockCmd(); // GPIO时钟使能
// 2. 引脚复用映射:
GPIO_PinAFConfig();
// 3. GPIO端口模式设置:
GPIO_Init(); //模式设置为GPIO_Mode_AF
// 4. 串口参数初始化:
USART_Init();
// 5. 开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
// 6. 使能串口:
USART_Cmd();


// 1. 编写中断处理函数:
USARTx_IRQHandler();
// 2. 串口传输状态获取:
FlagStatus USART_GetFlagStatus();
void USART_ClearITPendingBit();
// 3. 串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

EXTI

// 1. 使能SYSCFG时钟: 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
// 2. 初始化IO口为输入。
GPIO_Init();
// 3. 设置IO口与中断线的映射关系。
void SYSCFG_EXTILineConfig();
// 4. 初始化线上中断,设置触发条件等。
EXTI_Init();
// 5. 配置中断分组(NVIC),并使能中断。
NVIC_Init();
// 6. 编写中断服务函数。
EXTIx_IRQHandler();
// 7. 清除中断标志位
EXTI_ClearITPendingBit();

TIMx 定时器

  • 头文件:stm32f4xx_tim.h
  • 源文件:stm32f4xx_tim.c
// 1. 能定时器时钟。
RCC_APB1PeriphClockCmd();
// 2. 初始化定时器,配置ARR,PSC。
TIM_TimeBaseInit();
// 3. 开启定时器中断,配置NVIC。
NVIC_Init();
// 4. 使能定时器。
TIM_Cmd();
// 5. 编写中断服务函数。
TIMx_IRQHandler();

PWM输出

// 1. 使能定时器14和相关IO口时钟。
RCC_APB1PeriphClockCmd();    // 使能定时器14时钟:
RCC_AHB1PeriphClockCmd ();   // 使能GPIOF时钟:
// 2. 初始化IO口为复用功能输出。
GPIO_Init();    /* GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 引脚设为复用功能 */
// 3. GPIOF9复用映射到定时器14
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); 	
// 4. 初始化定时器:ARR,PSC等:
TIM_TimeBaseInit();
// 5. 初始化输出比较参数:
TIM_OC1Init();
// 6. 使能预装载寄存器: 
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); 
// 7. 使能自动重装载的预装载寄存器允许位
TIM_ARRPreloadConfig(TIM14,ENABLE);
// 8. 使能定时器。
// 9. 不断改变比较值CCRx,达到不同的占空比效果:
TIM_SetCompare1();

ADC

// 1. 开启PA口时钟和ADC1时钟,设置PA1为模拟输入。
RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);  
GPIO_Init();      
// 2. 复位ADC1,同时设置ADC1分频因子。
ADC_DeInit();
// 3. 初始化ADC_CCR寄存器。
ADC_CommonInit();
// 4. 初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)// 5. 使能ADC。
ADC_Cmd(ADC1, ENABLE);


// 1. 配置规则通道参数:
ADC_RegularChannelConfig();
// 2. 开启软件转换:
ADC_SoftwareStartConvCmd(ADC1);
// 3. 等待转换完成,读取ADC值。
ADC_GetConversionValue(ADC1);

二、常用函数

GPIO

  • 头文件:stm32f4xx_gpio.h
  • 源文件:stm32f4xx_gpio.c
// 1个初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

// 2个读取输入电平函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

// 2个读取输出电平函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

// 4个设置输出电平函数:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

RCC

  • 头文件:stm32f4xx_rcc.h
  • 源文件:stm32f4xx_rcc.c
// 1. 时钟使能配置:
RCC_HSICmd, RCC_LSICmd, RCC_PLLCmd, RCC_PLLI2SCmd, 
RCC_PLLSAICmd, RCC_RTCCLKCmd,RCC_AHBxPeriphClockCmd
RCC_APBxPeriphClockCmd

// 2. 时钟源和时钟相关配置:
RCC_HSEConfig, RCC_LSEConfig, RCC_PLLConfig, 
RCC_PLLI2SConfig, RCC_PLLSAIConfig, RCC_MCO1Config, 
RCC_MCO2Config, RCC_SYSCLKConfig, RCC_HCLKConfig,
RCC_PCLK1Config,RCC_PCLK2Config,RCC_RTCCLKConfig,
RCC_I2SCLKConfig

// 3. 外设复位函数
RCC_AHB1PeriphResetCmd,RCC_AHB2PeriphResetCmd,
RCC_AHB3PeriphResetCmd,RCC_APB1PeriphResetCmd,
RCC_APB2PeriphResetCmd

// 4. 状态参数获取参数:
RCC_GetSYSCLKSource,RCC_GetClocksFreq,
RCC_GetFlagStatus,RCC_ClearFlag

// 5. RCC中断相关函数 :
RCC_ITConfig,RCC_ClearITPendingBit,RCC_GetITStatus

NVIC

// 设置中断优先级
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
// 使能/失能 中断
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
// 挂起/解挂 中断
static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)// 读取当前中断是哪一个
static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn)

UART 串口

void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断

void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位

EXTI

//设置IO口与中断线的映射关系
void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex);
   exp: SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//区别M3

//初始化中断线:触发方式等
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);

//判断中断线中断状态,是否发生
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);

//清除中断线上的中断标志位
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

//这个函数非常重要,在使用外部中断的时候一定要先使能SYSCFG时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟

TIMx 定时器

  • 头文件:stm32f4xx_tim.h
  • 源文件:stm32f4xx_tim.c
// 定时器使能函数
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
// 定时器中断使能函数
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
// 状态标志位的获取与清除
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

ADC

// ADC通用初始化(配置ADC_CCR寄存器的相关参数)
void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
// ADC初始化
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
// 复位ADC1
void ADC_DeInit(ADC_TypeDef* ADCx)
// ADC使能函数
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
// ADC中断
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);
// ADC使能软件转换函数 
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
// ADC 规则通道配置函数
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
// ADC 获取转换结果函数
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F103是STMicroelectronics(意法半导体)推出的一款32位ARM Cortex-M3内核的微控制器系列。它被广泛应用于工业控制、嵌入式系统、汽车电子等领域。 针对STM32F103系列微控制器,STMicroelectronics提供了一份详细的中文手册,其中包含了该系列微控制器的库函数使用说明。 在这份中文手册中,我们可以找到关于该系列微控制器的丰富信息和功能描述。手册的结构清晰,内容详尽,方便开发者了解和使用库函数。 该中文手册主要包含以下内容: 1. STM32F103系列微控制器的概述:介绍了该系列微控制器的主要特点、性能指标和应用领域。 2. 库函数的基本知识:介绍了库函数的基本概念和使用方法,包括函数调用、参数传递、返回值等。 3. 常用库函数:详细介绍了该系列微控制器中常用的库函数,包括GPIO控制、定时器、串口通信、ADC等。 4. 库函数实例代码:提供了一些库函数的实例代码,方便开发者理解和使用库函数。 5. 常见问题解答:对一些常见问题进行了解答,帮助开发者解决在使用库函数过程中遇到的困惑。 通过阅读该中文手册,开发者可以快速掌握STM32F103系列微控制器的库函数使用方法,并能够更加高效地进行软件开发工作。同时,该手册还提供了一些实例代码,方便开发者快速上手。 总之,STM32F103库函数中文手册为开发者提供了详尽的库函数使用指南和实例代码,帮助开发者更好地了解和应用STM32F103系列微控制器。 ### 回答2: STM32F103库函数中文手册是一本详细介绍STM32F103系列微控制器库函数的参考手册。该手册包含了该系列微控制器中可以使用的各种库函数的详细说明和用法。 手册的编写目的是为了方便开发人员在使用STM32F103系列微控制器时能够更好地理解和掌握库函数的使用。手册中包含了丰富的示例代码和详细的函数说明,可以帮助开发人员快速上手并正确地使用库函数。 手册的内容按照功能进行分类,包括GPIO控制、时钟控制、定时器、串口通信、中断控制等模块。每个模块都有专门的章节,介绍了相应模块的库函数及其使用方法。 在手册中,每个库函数的说明都包含了函数的名称、参数、返回值和功能描述。此外,还提供了详细的示例代码,展示了库函数的正确使用方法。开发人员可以根据手册中的示例代码进行学习和实践,以便更好地理解和掌握库函数的使用。 总之,STM32F103库函数中文手册是一本对于开发人员来说非常有价值的参考资料。它可以帮助开发人员更好地掌握STM32F103系列微控制器的库函数的使用,提高开发效率和代码质量。 ### 回答3: stm32f103是一款常用的32位微控制器系列,它具有丰富的外设和功能。对于开发者来说,熟悉并理解stm32f103库函数非常重要。 stm32f103库函数中文手册是官方提供的一份文档,用于详细介绍stm32f103的库函数及其使用方法。这本手册可以帮助开发者更容易地使用库函数进行编程,并能够快速查询需要的函数和参数信息。 库函数包括了丰富的外设驱动函数,如GPIO、串口、定时器、中断等。它们通过提供一系列函数接口,使得开发者可以方便地配置和操作这些外设,实现各种功能需求。库函数中文手册中详细列出了每个函数的功能、参数、返回值以及使用示例,使得开发者能够清楚地了解如何正确地调用这些函数。 通过阅读stm32f103库函数中文手册,开发者可以深入理解库函数的工作原理和使用方法。手册涵盖了大量的内容,包括库函数的分类、库函数的组织结构、库函数的使用规范等等。对于想要学习和应用stm32f103的开发者来说,这本手册是必备的参考工具。 总结来说,stm32f103库函数中文手册是一本详尽的文档,用于指导开发者正确使用stm32f103的库函数。它可以帮助开发者更好地使用stm32f103的功能和外设,提高开发效率,实现各种应用需求。对于学习和开发stm32f103的人来说,这本手册是不可或缺的宝典。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值