本帖最后由 雨落沉轩 于 2013-1-5 23:01 编辑
今天跑了一个stm32f3的官方例子,关于GPIO的使用,一开始程序就是点亮两个led灯。程序下载后两个led点亮,但亮度非常低。后来看了一本书上的GPIO配置方法,这两个led正常点亮。接着我修改了一下程序想点亮8个led,可有另外两个led就是无法点亮。先亮出我的部分程序:
#include "main.h"
#define BSRR_VAL 0xFF00
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
/* GPIOE Periph clock enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);
/* Configure PE14 and PE15 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12 | GPIO_Pin_11 | GPIO_Pin_10 | GPIO_Pin_9 | GPIO_Pin_8;
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_UP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
while (1)
{
/* Set PE14 and PE15 */
GPIOE->BSRR = BSRR_VAL;
/* Reset PE14 and PE15 */
GPIOE->BRR = BSRR_VAL;
}
} //上面程序能正常点亮6个led。两个无法点亮
还有关于推免和开漏问题
其一:在上述程序中,如果不注释掉“GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;”这句就无**常点亮led(显示亮度很低),这句话的意识应该是配置为推免输出,但查看datasheet发现默认配置就为推免输出。那为何我主动配置一下就不行了呢。
其二:通过查看资料发现推免输出可能驱动能力不够,于是我试试采用开漏方式,也就是GPIO_InitStructure.GPIO_OType = GPIO_OType_OD(开漏方式);且把程序中红色 //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;注释去掉,也就是使能上拉。以为这样驱动能力强点应该没问题,可还是无法点亮,求大神指点,是哪里弄错了。
|