微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32F10XX之应用笔记-GPIO设置

STM32F10XX之应用笔记-GPIO设置

时间: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推挽输出

}

一看都会觉得寄存的简单;库函数更好读也更让别人理解;这就仁者见仁智者见智了,我自己还是更喜欢寄存器,因为保密性要好些(库函数只要是编过程的一眼就读懂了),当然是团队合作肯定要用库函数咯。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top