打印
[活动]

【极海APM32M3514电机通用评估板测评】+复用串口基础测试备用+SWD识别不了设备的解决方法

[复制链接]
108|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新年比较忙,预计要到3月底,才能有大空,到时候会用M3514板子好好学一学电机驱控。
所以贴子发得少,有愧于Geehy负责评估工作的饭饭。
今天看到评估群里有群友好像是遇到了LED翻转或者串口通信的问题?没有仔细看。
心想反正到了电机调试的时候,我也会用到串口的,今晚先试一试串口吧。
如果能帮到群友更好。

刚拿到板子时,我就发现Geehy这块M3514板子,它的SWD调试口,其实2个通信引脚正好可以做串口,连排针都有了:



缺点是没有把RESET引出来,会有一点小问题,但有办法解决(JLink连接板子时会失败,后面会提到解决方法)。
在数据手册里找到引脚复用表,程序里要相应修改的:



再看一下板子上的LED,好像只有一个可编程的?够用了,就它了:



再检查一遍引脚:



OK,一切就绪,在官方SDK里找一个例程,就用GPIO_Toggle这个吧,
就用在原位置复制一个,名为GPIO_Toggle_USART2:



注意,一定要在同级文件夹下,不然还要修改工程里面的SDK库搜索路径,麻烦。

修改以下代码:

1、main.c

为了省事儿,我直接用库里的printf了,于是把调试用的USART1改为USART2:

/* printf using USART2  */
#define DEBUG_USART             USART2

在APM_MINI_Init函数里,把USART1的初始化,改为USART2:

void APM_MINI_Init(void)
{
    /* Init delay function */
    APM_DelayInit();

    APM_MINI_PBInit(BUTTON_KEY1, BUTTON_MODE_GPIO);
       
                APM_DelayMs(200);//安全起见,加一个延时
                APM_MINI_COMInit(COM2);//这里原为COM1,改用COM2
}

因为只有一个LED3,GPIO_Init函数改成这样:

void GPIO_Init(void)
{
    GPIO_Config_T gpioConfig;

    RCM_EnableAHBPeriphClock(LED3_GPIO_CLK);
    /* LED3 GPIO configuration */
    gpioConfig.pin = LED3_PIN;
    gpioConfig.mode = GPIO_MODE_OUT;
    gpioConfig.outtype = GPIO_OUT_TYPE_PP;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    gpioConfig.pupd = GPIO_PUPD_NO;
    GPIO_Config(LED3_GPIO_PORT, &gpioConfig);
}

main()函数改成这样:

int main(void)
{
    APM_MINI_Init();
       
    GPIO_Init();

    printf("This is an example of GPIO toggle \r\n");

    while (1)
    {
        /* Turn LED3 off */
        GPIO_SetBit(LED3_GPIO_PORT, LED3_PIN);
        APM_DelayMs(200);

        /* Turn LED3 on */
        GPIO_ClearBit(LED3_GPIO_PORT, LED3_PIN);
        APM_DelayMs(200);
                       
                                printf("GPIO toggle \r\n");
   }
}

2、board_apm32m35xx.h

原代码里有2个LED,改成这样,实际只用LED3:

#define LEDn                             2
#define LED2_PIN                         GPIO_PIN_12
#define LED2_GPIO_PORT                   GPIOA
#define LED2_GPIO_CLK                    RCM_AHB_PERIPH_GPIOA

#define LED3_PIN                         GPIO_PIN_12
#define LED3_GPIO_PORT                   GPIOA
#define LED3_GPIO_CLK                    RCM_AHB_PERIPH_GPIOA

Button顺便也改一下,但没用到:

#define KEY1_BUTTON_PIN                   GPIO_PIN_12
#define KEY1_BUTTON_GPIO_PORT             GPIOB
#define KEY1_BUTTON_GPIO_CLK              RCM_AHB_PERIPH_GPIOB
#define KEY1_BUTTON_EXTI_LINE             EINT_LINE12

#define KEY2_BUTTON_PIN                   GPIO_PIN_13
#define KEY2_BUTTON_GPIO_PORT             GPIOC
#define KEY2_BUTTON_GPIO_CLK              RCM_AHB_PERIPH_GPIOC
#define KEY2_BUTTON_EXTI_LINE             EINT_LINE13

串口我们使用USART2,所以做如下修改(注意,用红色标出的位置,与前面复用表里对应):

#define MINI_COM2                        USART2
#define MINI_COM2_CLK                    RCM_APB1_PERIPH_USART2

#define MINI_COM2_TX_PIN                 GPIO_PIN_14
#define MINI_COM2_TX_GPIO_PORT           GPIOA
#define MINI_COM2_TX_GPIO_CLK            RCM_AHB_PERIPH_GPIOA
#define MINI_COM2_TX_SOURCE              GPIO_PIN_SOURCE_14
#define MINI_COM2_TX_AF                  GPIO_AF_PIN1

#define MINI_COM2_RX_PIN                 GPIO_PIN_13
#define MINI_COM2_RX_GPIO_PORT           GPIOA
#define MINI_COM2_RX_GPIO_CLK            RCM_AHB_PERIPH_GPIOA
#define MINI_COM2_RX_SOURCE              GPIO_PIN_SOURCE_13
#define MINI_COM2_RX_AF                  GPIO_AF_PIN6

#define MINI_COM2_IRQn                   USART2_IRQn

编译,下载,然后JLink断开,连接串口小板,LED3开始翻转闪烁,并定时向串口发出字符串。就没时间试验MCU的接收功能。

再次下载固件时,IDE会找不到SWD设备,也就是找不到这个板子上的MCU。
原因是,JLink连接板子时,会发出硬件RESET信号,并通过SWD通信线,向板子发一个软复位指令。
因为板子的调试口只有VCC、GND、SWD、SWC这4根线,没有RESET,所以收不到硬件RESET信号;
又因为SWC和SWD配置成了串口,软复位指令也收不到了。

解决方法也简单:
一种方法是,在JLink连接前(比如点击下载、或配置JLink都会触发连接),按住板子上的RESET按钮,保持复位,
然后松开,JLink就会连接成功。
另一种方法是,拿一根公+母的杜邦线,一头接在JLink的RESET脚,一头怼在板子的RESET按钮这个位置,如图:



此时点击下载固件,就会自动通过RESET线硬件复位MCU,下载成功。
两种方法我都试过,对这个串口复用方案有效。

工程文件夹已打包作为贴子附件,有需要可下载,注意,头文件board_apm32m35xx.h在SDK的另一个文件夹里:

游客,如果您要查看本帖隐藏内容请回复


使用特权

评论回复
沙发
meiyaolei| | 2025-2-19 22:01 | 只看该作者
学习一下高手的方法

使用特权

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

本版积分规则

29

主题

306

帖子

3

粉丝