打印
[APM32F0]

APM32F003 SWDIO SWCLK作为GPIO口使用

[复制链接]
1919|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tiangengqiu|  楼主 | 2022-10-30 18:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多客户对产品进行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接口 JTAGwInterfacewDisable
0:使能 JTAG接口; PD1为 SWDIO PD2为 SWCLK
1:禁止 JTAG接口; PD1和 PD2为普通 IO
手册建议配置PD1 PD2作为普通IO需要设置寄存器 JTAGDIS 为 1
void 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模式的差异...

使用特权

评论回复
沙发
软核硬核| | 2022-11-3 16:53 | 只看该作者
一般SWD不会作为正常IO口用吧,除非IO口真的就差这两个引脚,不过一般真不建议。

使用特权

评论回复
板凳
芯路例程| | 2022-11-3 16:54 | 只看该作者
把SWDIO SWCLK作为GPIO口使用,会不会影响下载程序?

使用特权

评论回复
地板
tiangengqiu|  楼主 | 2022-11-8 17:44 | 只看该作者
芯路例程 发表于 2022-11-3 16:54
把SWDIO SWCLK作为GPIO口使用,会不会影响下载程序?

如果使能 禁止 JTAG接口 寄存器需要重新上电识别,一般Keil会比较难下载,Jflash先擦除程序后恢复正常

使用特权

评论回复
5
芯路例程| | 2022-12-4 11:50 | 只看该作者
tiangengqiu 发表于 2022-11-8 17:44
如果使能 禁止 JTAG接口 寄存器需要重新上电识别,一般Keil会比较难下载,Jflash先擦除程序后恢复正常 ...

那还是不要改成GPIO用比较好!

使用特权

评论回复
6
pentruman| | 2022-12-4 20:32 | 只看该作者
这个最好不要禁用的。              

使用特权

评论回复
7
updownq| | 2022-12-4 21:02 | 只看该作者
swd接口以后怎么下载程序?              

使用特权

评论回复
8
everyrobin| | 2022-12-4 21:32 | 只看该作者
为什么必须使用 SWDIO SWCLK?

使用特权

评论回复
9
woai32lala| | 2022-12-5 14:30 | 只看该作者
everyrobin 发表于 2022-12-4 21:32
为什么必须使用 SWDIO SWCLK?

把CPU资源压榨到极致,最好别用,仿真会出问题

使用特权

评论回复
10
qiufengsd| | 2022-12-5 21:56 | 只看该作者
怎么才能修改为 SWDIO SWCLK口呢?

使用特权

评论回复
11
febgxu| | 2022-12-5 23:08 | 只看该作者
感觉 SWDIO SWCLK必要禁用,否则后期无法下载程序。

使用特权

评论回复
12
jonas222| | 2022-12-6 14:27 | 只看该作者
这个就是复用的功能,需要修改掉的。

使用特权

评论回复
13
Undshing| | 2023-1-3 15:45 | 只看该作者
SWD一般不会作为正常IO口用

使用特权

评论回复
14
macpherson| | 2023-2-6 15:51 | 只看该作者
这个影响单片机的操作的吧。              

使用特权

评论回复
15
modesty3jonah| | 2023-2-6 16:00 | 只看该作者
然后怎么下载程序呢?              

使用特权

评论回复
16
maudlu| | 2023-2-7 21:14 | 只看该作者
设置为普通I/O口,单片机被锁定,不能再次下载程序。

使用特权

评论回复
17
beacherblack| | 2023-2-8 19:27 | 只看该作者
默认就是用于SWJ调试的吧               

使用特权

评论回复
18
juliestephen| | 2023-2-8 20:07 | 只看该作者
需加上拉1K-4.7K左右,不加的话如果你的JLINK内部没有上拉,在下载和调试时有可能会不稳定。反正我是吃过一次亏了。

使用特权

评论回复
19
MLRS| | 2023-2-9 08:58 | 只看该作者
运用挺灵活

使用特权

评论回复
20
wwppd| | 2023-3-5 11:16 | 只看该作者
SWDIO SWCLK也可以实现复用吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

12

帖子

1

粉丝