今天和大家分享一下,如果使用AT32L0系列的SWD引脚中的PA13(SWD)引脚,用于普通IO口,内部程序中将单片机的SWD调试功能关闭了。
具体的关闭调试功能代码如下所示:
void swj_dp_config(void)
{
gpio_init_type gpio_init_struct;
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_USART2_PERIPH_CLOCK, TRUE);
gpio_default_para_init(&gpio_init_struct);
/* configure pa13 (jtms/swdat) as general output push-pull */
gpio_init_struct.gpio_pins = GPIO_PINS_13;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOA, &gpio_init_struct);
/* configure pa14 (jtck/swclk) as mux usart2 tx */
gpio_init_struct.gpio_pins = GPIO_PINS_14;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOA, &gpio_init_struct);
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE14, GPIO_MUX_1);
/* configure usart2 param */
usart_init(USART2, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
usart_transmitter_enable(USART2, TRUE);
usart_enable(USART2, TRUE);
}
可以看到AT32将PA13和PA14引脚复用成为了串口2的功能引脚,我们将程序下载到单片机内部,再KEIL中就检测不到单片机了如下所示,再次下载程序的时候就不能使用调试模式下载程序了,
相信大家在调试其他32的单片机时候也会遇到类似的问题,如果不是人为的操作,也会将芯片的单片机锁住,不过大家不用担心,AT公司的32芯片也支持串口下载程序。具体下载步骤如下:
使用Artery ICPProgrammmer.exe软件,烧录一下GPIO闪烁的程序就好!
首先将开发板JP1 处的跳线帽 接至VDD,将单片机的BOOT0拉高就可以,使程序再ISP区启动。
软件操作说明:
注意:AT32L021 的BOOT1 位于用户系统数据区(0x1FFF F800),当使用ISP 工具时,请确认nBOOT1=1(出厂默认值),使程序由系统启动程序代码区(而不是SRAM)启动。
访问保护即大家通常说的"加密”,作用于整个 Flash 存储区域。一旦设置了 Flash 的访问保护,内置的Flash 存储区只能通过程序的正常执行才能读出,而不能通过 JTAG 或者 SWD 读出,当使用 ICPISP 工具解除访问保护时,芯片会对FLASH 进行擦除操作。注意:一旦启动高级访问保护后,将不能被解除,并且禁止用户以任何方式重新擦除以及写入系统数据区可用ICP/ISP 工具对 IC 进行访问保护与解除访问保护操作,如下:Artery ICP Programmer工具(BOOT0=0)
启用访问保护:设备操作--访问保护--启用访问保护/启用高级访问保护。
解除访问保护:设备操作--访问保护-解除访问保护。
下载完成之后,将BOOT0引脚拉低,就可以看到LED闪烁的程序了,这时候已经将AT32的SWD调试功能再次打开了。
这里简单和stm32/cw32的串口下载,做一个简单的对比;
对于STM32串口下载时,我使用过flymcu进行串口下载,基本的步骤是类似的也需要将单片机的BOOT0引脚拉高,然后在选择一个GPIO闪烁的程序就可以了,下载的速度感觉比AT32的下载要慢一些,而且还比较麻烦,需要配置一些参数;
而CW32公司也有类似的操作软件,当时是程序初始化错误,导致再次下载时候,单片机检测不到了,参考CW公众号的串口烧录视频进行擦写,操作过程类似,不过由于我当时学习的CW32开发板,并没有板载的调试器,擦写的时候也是有些麻烦的。
所以说,不小心将32位单片机的设置成写保护了也不用太担心,官方提供了擦除的方法,不过要注意,AT32设置成高级保护之后,芯片就被彻底锁死了。
|