第1个回答 2017-12-10
#include "stm32f10x.h"
#include "GPIO_Config.h"
/*********************************************************************************/
/***GPIO_Config***/
void GPIO_Config(void)
{
RCC -> APB2ENR |= 1<<0; //开启AFIO IO口辅助功能时钟使能
// RCC -> APB2ENR |= 0x1c; //开启GPIO——A,B ,C
RCC -> APB2ENR |= 0x7c; //开启GPIO——A,B ,C,D,E 103VET6
// AFIO -> MAPR &= ~(0x0f<<24);AFIO -> MAPR |= 2<<24; //配置前先清除;关闭JTAG-DP +SW-DP功能
RCC -> APB2RSTR |= 0x7c;RCC -> APB2RSTR &= ~0x7c; //复位GPIO——A-B-C-D-E,并清除复位
// GPIOA -> CRL = 0x33333333;GPIOA -> CRH = 0x33333333; //推挽 输出 50MHZ
// GPIOB -> CRL = 0x33333333;GPIOB -> CRH = 0x33333333;
// GPIOC -> CRL = 0x33333333;GPIOC -> CRH = 0x33333333;
// GPIOD -> CRL = 0x33333333;GPIOD -> CRH = 0x33333333;
// GPIOE -> CRL = 0x33333333;GPIOE -> CRH = 0x33333333;
}
/*********************************************************************************/
/***GPIO_Port_Enable***/
void GPIO_Port_Mode(GPIO_TypeDef *GPIO_Numtemp,unsigned char GPIO_PortNum,unsigned char GPIO_PortMode)
{
GPIO_PortMode &= 0x0f;GPIO_PortNum &= 0x0f;
if(GPIO_PortNum < 8)
{
GPIO_PortNum *= 4;
GPIO_Numtemp -> CRL &= ~(0x0f <<GPIO_PortNum); //配置前先清除
GPIO_Numtemp -> CRL |= GPIO_PortMode <<GPIO_PortNum; //重新配置 GPIO XX 端口 功能
}
else
{
GPIO_PortNum -= 8;
GPIO_PortNum *= 4;
GPIO_Numtemp -> CRH &= ~(0x0f <<GPIO_PortNum);
GPIO_Numtemp -> CRH |= GPIO_PortMode <<GPIO_PortNum;
}
}
/**********************************************************************************/本回答被网友采纳