APM32F003 SWDIO SWCLK作为GPIO口使用
很多客户对产品进行MCU单片机选型的时候通常会考虑在性能保障的前提下,优先选择性价比高的芯片,极海APM32F003系列单片机是一款32位 Arm® Cortex® M0+内核,供电电压 2.0~5.5V,最高32K flash 最高4K RAM的高性价比的单片机,最低功耗在3.4ua左右,广受市场喜欢,目前在接受客户开发的过程中有遇到需要将JTAG SWDIO SWCLK 对应的应脚 PD1 和 PD2作为GPIO口使用的场景,但是反馈无法正常变化高低电平。使用APM32F003F6P6,开发板测试代码情况如下: GPIO_Config_T gpioConfig; gpioConfig.mode = GPIO_MODE_OUT_OD; gpioConfig.pin = GPIO_PIN_2; gpioConfig.speed = GPIO_SPEED_10MHz; GPIO_Config(GPIOD, &gpioConfig); GPIO_SetBit(GPIOD, GPIO_PIN_2); while(1) { Delay(); GPIO_Toggle(GPIOD, GPIO_PIN_2); }JTAG SWCLK 对应的PD2设置为开漏输出,使用示波器发现引脚没有电平变化。难道JTAG配置成GPIO需要增加特殊代码?所以赶紧查看用户手册。JTAG接口 JTAGwInterfacewDisable0:使能 JTAG接口; PD1为 SWDIO PD2为 SWCLK1:禁止 JTAG接口; PD1和 PD2为普通 IO手册建议配置PD1 PD2作为普通IO需要设置寄存器 JTAGDIS 为 1void GPIO_EnableSWD(void){*(uint8_t *)(GPIOD_BASE + 0x100) = 0x00;}void GPIO_DisableSWD(void){*(uint8_t *)(GPIOD_BASE + 0x100) = 0x01;}添加GPIO_DisableSWD();使能JTAGDIS 为 1后仍然发现示波器无法变化电平。失能SWD后,断点确实进不去了,函数确实生效了,这时就有点奇怪了。同时修改引脚为PD1惊奇发现,PD1能正常变化高低电平。去除GPIO_DisableSWD();重新编译后,PD1也正常能变化高低电平。难道是PD2输出能力不足?此时将PD2飞线到灯板发现,发光二极管居然能微微亮灭,想起代码是开漏输出的配置,再次修改为GPIO_MODE_OUT_PP,推挽输出模式,发现PD2正常变化高低电平。记录此文,分享,提醒GPIO模式的差异...一般SWD不会作为正常IO口用吧,除非IO口真的就差这两个引脚,不过一般真不建议。 把SWDIO SWCLK作为GPIO口使用,会不会影响下载程序? 芯路例程 发表于 2022-11-3 16:54
把SWDIO SWCLK作为GPIO口使用,会不会影响下载程序?
如果使能 禁止 JTAG接口 寄存器需要重新上电识别,一般Keil会比较难下载,Jflash先擦除程序后恢复正常 tiangengqiu 发表于 2022-11-8 17:44
如果使能 禁止 JTAG接口 寄存器需要重新上电识别,一般Keil会比较难下载,Jflash先擦除程序后恢复正常 ...
那还是不要改成GPIO用比较好! 这个最好不要禁用的。 swd接口以后怎么下载程序? 为什么必须使用 SWDIO SWCLK? everyrobin 发表于 2022-12-4 21:32
为什么必须使用 SWDIO SWCLK?
把CPU资源压榨到极致,最好别用,仿真会出问题 怎么才能修改为 SWDIO SWCLK口呢? 感觉 SWDIO SWCLK必要禁用,否则后期无法下载程序。 这个就是复用的功能,需要修改掉的。 SWD一般不会作为正常IO口用 这个影响单片机的操作的吧。 然后怎么下载程序呢? 设置为普通I/O口,单片机被锁定,不能再次下载程序。 默认就是用于SWJ调试的吧 需加上拉1K-4.7K左右,不加的话如果你的JLINK内部没有上拉,在下载和调试时有可能会不稳定。反正我是吃过一次亏了。 运用挺灵活 SWDIO SWCLK也可以实现复用吗
页:
[1]
2