tinnu 发表于 2021-2-26 22:51

【AT-START-F407测评】GPIO 及 arduino中无法正常驱动的引脚

(一)GPIO配置
1-配置时钟
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA, ENABLE);


2-配置GPIO
        GPIO_InitType GPIO_InitStructure;
        GPIO_StructInit(&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pins = GPIO_Pins_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
        GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

(二)GPIO驱动
1-直接访问寄存器
GPIOA->BRE = GPIO_Pins_10;
2-使用库函数:
GPIO_SetBits(GPIOA, GPIO_Pins_10)
(三)arduino接口


实际使用中,测试了右侧CON8的3-8、CON10的1-3作为GPIO输出,其中PA10、PA9、PB3、PB4、PA15都是无法驱动的。

1-PA10、PA9
猜测PA9、PA10是由于作为串口连接到仿真器,可能被仿真器钳住了。
将以下两颗电阻去掉
然后就可以驱动PA10、PA9

顺便把下面那颗SWO也一起去掉


2-PB3、PB4、PB15
猜测 PB3、PB4、PB15 是由于作为JTAB引脚,需要被释放再驱动。
官方例程需要执行该命令禁止JTAB功能:
GPIO_PinsRemapConfig(GPIO_Remap_SWJ_AllDisable, ENABLE);
但是禁用JTAB之后就只能串口ISP烧录或者修改BOOT方式,加之我上面把串口的电阻去掉了,这么干绝对是给自己找麻烦。所以试试能不能只禁用一半,因为SWJ调试理论上只需要PA13、PA14

光看这释放的形式跟友商神似的设计,稳了
GPIO_Remap_SWJ_JTAGDisable 0x02000000
GPIO_Remap_SWJ_AllDisable 0x04000000
显然就是 GPIO_Remap_SWJ_JTAGDisable :
    GPIO_PinsRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
结果不行。我一度以为这几个IO口就是无法单独释放的。连忙飞线,引了PE3、PE5去替代这几个口。
后来仔细研究,发现这个释放IO口是在 【重映射】 相关章节的:

于是加上一个:
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_AFIO, ENABLE);

果然就可以了。


讲实话,我对引出这种奇奇怪怪的引脚到 arduino 接口还是持消极态度,作为上百引脚的芯片,多达80个IO,为何偏偏要选这几个稀奇古怪的东西出来?


小明的同学 发表于 2021-3-1 19:10

呵呵,兼容。

yangxiaor520 发表于 2021-3-1 20:46

谢谢楼主分享经验,学习了。

xu@xupt 发表于 2022-11-28 18:46

有没有官方arduino??
页: [1]
查看完整版本: 【AT-START-F407测评】GPIO 及 arduino中无法正常驱动的引脚