(一)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,为何偏偏要选这几个稀奇古怪的东西出来?
|