STM32F106配合STM32CubeMX——操作
STM32CubeMX:
1,LED配置,原理图是PB0,PG6,PG7;配置为GPIO输出
2,RCC为时钟配置,crystal/ceramic resonator是晶体时钟,晶振;bypass clock source为时钟旁路,这两区别暂时没弄懂,以后在谈
同时也分为高速时钟和低速时钟,搭配起来就有了HSE、HIS、LSE、LSI时钟模式,I为内部时钟,E为外部时钟
3,再在clock configuration 时钟布局中设置
上一张时钟内部图
这是CubeMX中的时钟布局
时钟信号由 INput Frequency HSE PLL source MUx 输入 9倍频 得到72M,再通过system Clock Mux锁相环时钟,使能CSS Enabled;得到AHB后的时钟为72MHz ,后面APB1最大为36M,则需要分频到36MHz
至于为什么要这样配置,我目前还不清楚,继续学下去以后来解答
4,configuration 引脚布局配置,GPIO的输出模式是推挽输出;已经设置输出低电平,初始要求低电平LED灯灭
5.STM32CubeMX给出了两个.c文件,一个main.c,一个gpio.c
gpio.c定义了一个gpio函数,
(1).先使能这个时钟端口_
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
(2). 配置该端口为低电平,
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
(3).调用这个GPIO函数为引脚进行初始化
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PG6 PG7 */
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
CubeMX只能帮忙初始化一个状态,后面想要得到其他的效果,就需要自己写程序了
,这个函数为断言函数
GPIO初始化结构体
typedef struct{
uint32_t Pin;/GPIO引脚编号选择/
uint32_t Mode;/GPIO引脚工作模式/
uint32_t Pull;/GPIO引脚上拉,下拉配置/
uint32_t Speed;/GPIO引脚最大输出速度/
}GPIO_InitTypeDEF;