谷动谷力

 找回密码
 立即注册
查看: 1986|回复: 0
打印 上一主题 下一主题
收起左侧

灵动微课堂 (第209讲) | 工程师笔记——MM32F0010使用总结

[复制链接]
跳转到指定楼层
楼主
发表于 2022-10-25 21:44:55 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
灵动微课堂 (第209讲) | 工程师笔记——MM32F0010使用总结

案例一

有工程师提到:MM32F0010 的 PA13 和 PA14 引脚能否设置成GPIO?如何设置?

分析原因

PA13\PA14 默认是 SWD 功能,并且可以设置成通用 GPIO 或其他复用功能,需要将 PA13\PA14 的 SWD 功能进行 disable 才可以实现 GPIO 功能。

解决办法

设置方式:

void SWDasGPIO_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;

    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

    GPIO_PinAFConfig(GPIOA,GPIO_PinSource14,GPIO_AF_4);   
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource13,GPIO_AF_4);

    GPIO_StructInit(&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_14|GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

案例二

有工程师提到:SWD 复用成 GPIO 后如何恢复 SWD 功能并进行二次下载?

分析原因

PA13\PA14被设置成 GPIO 或者其他复用功能后,如果需要再次通过 SWD 接口连接目标 MCU,需要做如下动作:

因为 PA14 被设置成 GPIO 或者其他复用功能后, 该 I/O 不再是 SWCLK 功能,但只要进入 RESET(内部软件复位,IWDG 复位,Standby 唤醒,初始上电等过程)会短时间还会把该 IO 切换为 SWCLK 功能,直到执行 Main Flash 中的把该 Pin(nRST/PA14/SWCLK)功能配置为 GPIO 或 UART1_TXD 后,SWD 接口才会 Disable;

解决办法 1

可通过 SWD 接口的 PA14和 PA13 输入 Boot Switch 时序,切换到 ISP Boot,擦除目标 MCU 中 Main Flash 空间的程序,可以参考官网AN:《AN0010_MM32F0010_PIN_AF_Mode_Setting_SC》。

资料链接:https://www.mindmotion.com.cn/pr ... lue_line/mm32f0010/

本次以 MM32-LINK 为例,新建 MM32F0010 的工程后需要设置芯片锁定解锁状态,设置功能如下:

a) 当编程对象为 MM32F0010 系列芯片锁定时的解锁状态设定

b) 单击鼠标左键弹出对话框如右图,设置解锁重复次数和上电延时时间

c) 点击按键[OK]按键后状态栏显示“Unlock”

d) 当目标对象被解锁时, 状态栏显示“Normal”

单击状态栏的“Normal”在弹出的对话框中单击OK,状态栏从 Unlock 跳变到Normal 听到滴两声,同时状态栏内核识别指示灯亮黄灯,说明解锁成功,最后单击 Erase Chip 听到滴一声解锁完成,同时状态栏显示芯片擦除成功,内核指示灯跳变成绿灯。

如果解锁不成功,断开仿真器与目标板连接的烧录线,单击 Normal,在弹出的对话框中 Repeat 设置成500(该值依据具体情况可灵活修改),然后单击 OK,仿真器再与目标板连接并自动解锁,状态栏从Unlock跳变到 Normal 听到滴两声,同时状态栏内核识别指示灯亮黄灯,说明解锁成功,最后单击 Erase Chip 听到滴一声解锁完成,同时状态栏显示芯片擦除成功,内核指示灯跳变成绿灯。

解决办法 2

如果程序中进入 main()程序后,需要将 PA13 和 PA14 设置成 GPIO 功能时,可以预置较长时间的延时等待(在调试过程设置延时>10s,量产阶段屏蔽延时),可通过重新上电 MCU,立刻执行 Erase Chip 功能,擦除目标 MCU 中 Main Flash 空间的程序;

案例三

有工程师提到:使用 MM32-LINK 对 MM32F0010 下载,提示下载失败?该如何设置?

分析原因

MM32-LINK 会通过 Vref 引脚检查 MCU 的供电电压,若Vref引脚未连接到主电源上,MM32-LINK 会认为目标 MCU 未供电且在下载时弹出相应的错误提示。

解决办法

硬件接线如下所示:

若 MM32F0010 未独立供电,Keil 中需要配置 MM32-LINK 电源输出,并且取消 Reset 的设置。

案例四

有工程师提到:MM32F0010 的 ADC 多通道采样存在串扰是什么原因?

分析原因

MM32F0010 有 1 个 12 位模数转换器,1uS 转换时间(多达 8 个输入通道),支持单次模式、单周期模式和连续模式,多通道采样需要使用单周期或者连续模式。当 ADC 的采样电容在两个通道之间进行切换时等效电路如下所示:

两路信号源 A 和 B 的电平分别为Ua和Ub,其内阻分别是 Ra 和 Rb,其中,Cs 是 ADC 的采样电容,Rs 是 ADC 的采样电阻,MM32F0010 的内部采样电容 Cs 为 10pF。

为了简化问题,假定两路信号的扫描次序是由信号源 B 到信号源 A,且信号源 B 接入的时间足够长,以至在通道切换时采样电容 Cs 上的电压可以近似的等于 Ub ,于是,在通道切换到信号源 A 后,采样电容 Cs 上的电压将会随着时间进行充放电的动作,随着采样保持时间t 的增长,采样电容 Cs 上的电压逐渐趋近于 Ua ,而其与 Ua 之间的误差 ∆U 即是信号源 B 通过采样电容 Cs 对信号源 A 的藕合值,且随着采样保持时间t的增长,该值逐渐减小,最终趋近于零。

解决办法

在实际 ADC 转换中,由于 ∆U 的值的误差最终会反馈在 ADC 最终的转换结果中,所以有的用户反馈转换结果比实际结果存在偏差。我们在应用中避免该问题,需要 ∆U 的值趋近于 0 才符合实际的要求。

有种方法可以减小 ∆U 的取值:

1. 通过增加采样保持时间 t,使 ∆U 获得更多的衰减时间;

2. 通过减小信号源的内阻 Ra,使 ∆U 具有更快的衰减速率;

在实际运用时,在增加采样保持时间方面可以通过修改 ADC 的设置参数来实现(通过调整 ADC 采样率和 ADC 的采样周期),而在降低信号源内阻方面可以通过在信号源与 ADC 之间加入跟随器进行隔离来实现。

案例五

有工程师提到:MM32F0010 功耗水平是多少?如何降低整机功耗?

分析原因

芯片有三种低功耗模式:

  • 睡眠模式 (CPU 停止,所有外设包括 CPU 的外设,如 NVIC、系统时钟 (SysTick) 等仍在运行)

  • 停机模式 (所有的时钟都已停止,寄存器和 SRAM 的内容依然保存)

  • 待机模式 (内核电源关闭,寄存器和 SRAM 的内容全部丢失)


低功耗一览表:

低功耗模式供应电流:

解决办法

在系统或电源复位以后,微控制器处于运行状态。当 CPU 不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。

在运行模式下,可以通过以下方式中的一种降低功耗:

  • 降低系统时钟频率

  • 关闭 APB 和 AHB 总线上未被使用的外设时钟


案例六

有工程师提到:MM32F0010 进入 STOP 模式后无法通过串口唤醒 ?

分析原因

MM32F0010 没有 LPUART,进入 STOP 模式后不能直接通过 UART 直接唤醒,只能通过 EXTI 外部中断方式唤醒。

解决办法

我们可以在 MCU 进入 STOP 前将 RX 脚设为 EXTI 模式,并使能对应的中断来实现。

案例七

有工程师提到:MM32F0010 进入低功耗之后,实际功耗远大于理想功耗,是什么原因?

分析原因

MCU 在进入 STOP 模式的时候,GPIO 的状态都是保持在进入低功耗模式之前的状态。当连接到外设后,外设的电平状态和所连接的 GPIO 不一致的时候,就会产生电流消耗,这个就是很多用户实际测试过程中发现功耗大于手册中的功耗。

解决办法

1、进入低功耗之前,对使用和未使用IO状态进行调整,比如有外部上拉,可配置成模拟输入等。

2、关闭外设时钟,例如 ADC、UART 等外设时钟进行关闭。

案例八

有工程师提到:通过按键唤醒 MM32F0010,串口不能正常工作?

分析原因

经分析发现,开发者进入的低功耗模式为停机模式,唤醒之后,未初始化串口外设,导致串口不能正常工作。

解决办法

唤醒 MM32F0010 之后,重新初始化串口(以及所有使用的)外设。

案例九

有工程师提到:进入低功耗后无法使用调试器二次下载是什么原因?

分析原因

由于进入低功耗后会关闭 SWD 的电源域,所以无法二次下载。

解决办法

在程序中需要设置正确的唤醒源,对 MCU 唤醒后才能进行下载。

可以参考问题2中的解决办法对 MCU 内部的程序进行擦除。


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-12-28 22:43 , Processed in 0.098247 second(s), 45 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表