|
static volatile GPIO_TypeDef *led_ctrl_reg[]=
{
LED0_GPIO_REGA,
LED0_GPIO_REGA,
LED0_GPIO_REGA,
LED0_GPIO_REGA,
LED0_GPIO_REGA,
LED0_GPIO_REGA,
};
//LED控制位
static uint32 const led_ctrl_bit[]=
{
LED0_CTRL_BIT1, //led0
LED0_CTRL_BIT2, //led1
LED0_CTRL_BIT3, //led2
LED0_CTRL_BIT4, //run
LED0_CTRL_BIT5, //power
LED0_CTRL_BIT6,
};
void led_init(void)
{
uint8 led_index;
//iob时钟使能
RCC->APB2ENR|=(0x01<<3);
RCC->APB2ENR|=(0x01<<2);
//配置I/O口属性
for(led_index=0;led_index<LED_NUM;led_index++)
{
//指向寄存器
volatile GPIO_TypeDef *GPIOx_REGS_p=led_ctrl_reg[led_index];
//判断是否要用高位寄存器
if(led_ctrl_bit[led_index]>=8)
{
GPIOx_REGS_p->CRH&=~(3<<((led_ctrl_bit[led_index]-8)*4));//设置为输出模式
GPIOx_REGS_p->CRH|=(2<<((led_ctrl_bit[led_index]-8)*4));
GPIOx_REGS_p->CRH&=~(3<<((led_ctrl_bit[led_index]-8)*4+2));//设置为通用开漏模式
GPIOx_REGS_p->CRH|=(1<<((led_ctrl_bit[led_index]-8)*4+2));
}
else
{
GPIOx_REGS_p->CRL&=~(3<<(led_ctrl_bit[led_index]*4));//设置为输出模式
GPIOx_REGS_p->CRL|=(2<<(led_ctrl_bit[led_index]*4));
GPIOx_REGS_p->CRL&=~(3<<(led_ctrl_bit[led_index]*4+2));//设置为通用开漏模式
GPIOx_REGS_p->CRL|=(1<<(led_ctrl_bit[led_index]*4+2));
}
}
led_onoff(4,1);
mdelay(150);
led_onoff(4,0);
mdelay(150);
led_onoff(4,1);
}
小弟碰到点问题·请各位大虾~帮个忙~
看看到底是哪错了·郁闷一天了~
我设置A口的第1~第5个管脚问输出模式~ 通用开漏输出
但是初始化后~
A口的脚不能控制~
上午发现·输出端口A时钟没有打开~后来打开了~还是不能控制~
我把寄存器仿真图片发上来~
|
|