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:时钟控制寄存器

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);

浙公网安备 33010602011771号