STM32系列——GPIO控制

阿里云教程4个月前发布
23 1 0

从今天开始我会不间断的更新关于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;

STM32系列——GPIO控制

图一

STM32系列——GPIO控制

蜂鸣器控制电路 图二

高点平打开蜂鸣器,低电平关闭蜂鸣器;

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

}

管脚控制描述完成,下一个我会说下中断的设置和使用方法。

© 版权声明

相关文章

1 条评论

none
暂无评论...