从今天开始我会不间断的更新关于stm32的控制和使用,有简单到复杂,最后可以做产品。目前从简单的管脚控制开始。
第一建立工程(可以上网搜索一下创建过程),我这块直接开始;
初始化系统时钟:SystemInit();
说明:系统时钟一般在建立工程时工程内部会有,常规默认为内部时钟8MHZ(可以满足大部分使用)
void SystemInit (void)()
{
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
/* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE and MCOSEL[2:0] bits */
RCC->CFGR &= (uint32_t)0xF8FFB80C;
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
/* Reset PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
RCC->CFGR &= (uint32_t)0xFFC0FFFF;
/* Reset PREDIV1[3:0] bits */
RCC->CFGR2 &= (uint32_t)0xFFFFFFF0;
/* Reset USARTSW[1:0], I2CSW, CECSW and ADCSW bits */
RCC->CFGR3 &= (uint32_t)0xFFFFFEAC;
/* Reset HSI14 bit */
RCC->CR2 &= (uint32_t)0xFFFFFFFE;
/* Disable all interrupts */
RCC->CIR = 0x00000000;
/* Configure the System clock frequency, AHB/APBx prescalers and Flash settings */
SetSysClock();
}
系统时钟初始化完成之后配置管脚,第一开启管脚时钟(示例以STM32F030)
void RCC_Configuration(void)
{
/* ʹÄÜAHBʱÖÓ */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOF, ENABLE);
}
管脚状态选择(我比较常用的是管脚的输入、输出和做AD采样时的模拟输入)
ypedef enum
{
GPIO_Mode_IN = 0x00, /*输入模式*/
GPIO_Mode_OUT = 0x01, /*!< 输出模式 */
GPIO_Mode_AF = 0x02, /*!< 管脚交替功能 */
GPIO_Mode_AN = 0x03 /*!< 模拟输入模式*/
}GPIOMode_TypeDef;

图一

蜂鸣器控制电路 图二
高点平打开蜂鸣器,低电平关闭蜂鸣器;
PA6管脚初始化:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA, GPIO_Pin_6);(初始状态为关闭状态)
打开蜂鸣器:
void open_beep(void)
{
GPIO_SetBits(GPIOA, GPIO_Pin_6);
}
关闭蜂鸣器:
void close_beep(void)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_6);
}
管脚控制描述完成,下一个我会说下中断的设置和使用方法。