电子说
案例一
有工程师提到:MM32F0010 的 PA13 和 PA14 引脚能否设置成GPIO?如何设置?
分析原因
PA13PA14 默认是 SWD 功能,并且可以设置成通用 GPIO 或其他复用功能,需要将 PA13PA14 的 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 功能并进行二次下载?
分析原因
PA13PA14被设置成 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/products/mm32mcu/mm32f/mm32f_value_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 内部的程序进行擦除。
来源:灵动MM32MCU
全部0条评论
快来发表一下你的评论吧 !