STM32深入学习1:时钟系统和GPIO

RCC(复位和时钟控制):

系统复位的因素:

1.NRST按键复位

2.看门狗复位

3.软件复位

4.低功耗管理复位

SYSCLK系统时钟:

 

1.HSI时钟

2.HSE时钟:外部晶振

3.PLL时钟

 

 系统时钟:

PCLK1:APB1分频,最大36mhz

 

 

 PCLK2,ADC,TIM1,TIM8:APB2分频

 

初始化:

相关知识:

RCC相关寄存器:

RCC_CR:时钟控制寄存器

 

1
RCC->CR |= (uint32_t)0x00000001; //在系统前期,使能了内部高速时钟

 时钟配置寄存器(RCC_CFGR):

设置系统时钟源和其他分频

 

RCC->CFGR &= (uint32_t)0xF8FF0000; 

 

时钟中断寄存器 (RCC_CIR):

复制代码
static void SetSysClock(void)
{
#ifdef SYSCLK_FREQ_HSE
  SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
  SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
  SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
  SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
  SetSysClockTo56();  
#elif defined SYSCLK_FREQ_72MHz  //选择的时钟频率
  SetSysClockTo72();
#endif
 
 /* If none of the define above is enabled, the HSI is used as System clock
    source (default after reset) */ 
}
复制代码

 

 

GPIO:

1.介绍:推挽输出有一定的驱动能力,可以真正的输出高低电平;开漏实际是没有驱动能力的,想要驱动设备,需要外部有驱动电路支持。

2.GPIO寄存器:端口配置寄存器

3.GPIO固件库:

常用函数:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

涉及GPIO_InitTypeDef结构,定义时需要声明GPIO_Pin,GPIO_Speed,GPIO_Mode

 

复制代码

/**
* @brief Initializes the GPIOx peripheral according to the specified
* parameters in the GPIO_InitStruct.
* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
* @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
* contains the configuration information for the specified GPIO peripheral.
* @retval None
*/

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

typedef struct
{
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */

GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */

GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;

 

 
复制代码

GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

复制代码
/**
  * @brief  Sets the selected data port bits.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bits to be written.
  *   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
  * @retval None
  */
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BSRR = GPIO_Pin;
}
复制代码

时钟使能

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

 

 
 
此页面的语言为英语
 
翻译为中文(简体)
 
 
 
 


posted @   zxkic  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示