新闻中心

EEPW首页>嵌入式系统>设计应用> STM32F10XX之应用笔记-GPIO设置

STM32F10XX之应用笔记-GPIO设置

作者: 时间:2016-11-11 来源:网络 收藏
STM32F10XX会根据封装不同而引脚数不同;36脚(A 半B)48脚(A B) 64脚(ABC) 100脚(ABCDE) 144脚(ABCDEFG);STM32F10XX最多就是有7组16位的IO口;当然IO口越多能完成的功能就越多,能完完全全发挥STM32F10XX所有外设功能的只有144脚封装。
ST公司为STM32系列的芯片编写了固件库,给我们开发带来了很多方便;所以大家都觉得它好用,最重要的原因就是这了。但是要完全玩透它还是得去看看底层是怎么设置寄存器的,这对我们完成某个功能有更深刻的了解。
首先从设置GPIO开始,要使用一个IO口得有两个过程:一是使能IO口组的时钟;二是设置IO口的方向。牵扯到的寄存器有CCR_APBXENR,GPIOX_CRL,GPIOX_CRH,GPIOX_IDR,GPIOX_ODR,GPIOX_BSRR,GPIOX_BRR。ST公司已经把这些宏定义已经做好了,相应的名字对应的就是寄存器的名字。做过RAM9开发的都知道宏定义一边都是这样的:
#define REGXXXXX (*(volatile 数据类型*)(数据类型)0xXXXXXXXXXX))
但是呢,用STM32开发时这些在头文件里已经做好了(stm32f10x.h)。我就以GPIOA的Pin_0作为输出引脚为例:
库函数:
void GPOIA_CONFIG(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
寄存器:
CCR->APB2ENR
GPIOA->CRL
void GPOIA_CONFIG(void)
{
CCR->APB2ENR |=(1<<2);//开启GPIOA的时钟
GPIOA->CRL &=0XFFFFFFF0;
GPIOA->CRL |=0X000000003;//Pin_0推挽输出
}
一看都会觉得寄存的简单;库函数更好读也更让别人理解;这就仁者见仁智者见智了,我自己还是更喜欢寄存器,因为保密性要好些(库函数只要是编过程的一眼就读懂了),当然是团队合作肯定要用库函数咯。


关键词:STM32F10XXGPIO设

评论


技术专区

关闭