完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好,
我创建了一个测试项目,用于在设备通过 UART 接收数据时从停止模式唤醒设备。 我从 /STM32Cube/Repository/STM32Cube_FW_L5_V1.3.1/Projects/STM32L562E-DK/Examples/UART/ 提供的“UART_WakeUpFromStopUsingFIFO”移植了代码 STM 的示例项目按预期工作。设备进入停止模式并在收到数据时唤醒。 但是,我的测试项目不工作。 更多信息: 1. 该项目是为STM32L562 MCU 创建的。 2.测试板为L562-DK 3. 如果配置了 USART 1,LED GREEN 在我的项目中不会打开。 4. 从 STOP 模式唤醒不起作用。 5. 当我禁用代码进入停止模式 (SystemClock_Config_fromSTOP()) 并在从停止模式唤醒后配置系统时钟 (SystemClock_Config_fromSTOP()) 时,通过 UART 接收字节正在工作。使用 USART 1。 我已将我的项目附加到 zip 文件中。 你能告诉我,如何解决吗? 谢谢 |
|
相关推荐
1个回答
|
|
|
我已经下载了您的项目,在 nucleo-L552ZE-Q 上对其进行了测试,并且能够找出问题的根本原因。
在从 SystemClock_Config_fromSTOP() 调用的 HAL_RCC_OscConfig() 中第一次从 STOP 唤醒后,执行会卡住。 等待 RCC_CR_PLLRDY 的 while 循环以超时结束,因为此标志从未设置。 然后执行转到 Error_Handler()。 原因是在 RCC_OscInitStruct 中传递了错误的 PLL 参数,特别是 RCC_OscInitStruct->PLL->PLLM 在您的情况下为 1。 给定配置的正确值为 4。 RCC_OscInitStruct 值是通过调用函数 HAL_RCC_GetOscConfig() 获得的,这是 SystemClock_Config_fromSTOP() 的前一步。 STM32 可以使用 MSI 或 HSI 时钟源从 STOP 模式唤醒。如果应用随后使用不同的时钟设置(例如使用外部时钟源或 PLL),则必须在唤醒后重新配置时钟树(这就是调用 SystemClock_Config_fromSTOP() 的原因)。 在您的项目中,内部 HSI RC 16 MHz 振荡器用作唤醒源,请参见 main(): /* 指定 HSI 作为从停止模式唤醒后使用的时钟源 */ __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI); 在 SystemClock_Config_fromSTOP() 中,PLL 打开,HSI 配置为 PLL 源。 但是,当我检查用于初始时钟配置(在 main() 开始时调用)的 SystemClock_Config() 时, 使用不同的内部振荡器,即 MSI。它用作 PLL 源,所有 PLL 参数都相应设置。 然后,当您通过调用 SystemClock_Config_fromSTOP() 中的函数 HAL_RCC_GetOscConfig() 获取 RCC_OscInitStruct 值时, 你得到的是 MSI 的值而不是 HSI 的值(所以错误的 PLL 配置值)! 然后将这些传递给 HAL_RCC_OscConfig(&RCC_OscInitStruct)。 此配置(PLLSource = HSI、PLLM = 1、PLLN = 55、PLLR = 2)导致 PLL 生成的频率为 440 MHz,远高于 CPU 的最大值。频率 110 兆赫。 使用正确的配置(PLLSource = HSI,PLLM = 4,PLLN = 55,PLLR = 2),产生的频率为 110 MHz(因此 CPU 最大值)。 有几种方法可以解决这个问题,例如: 1) 在 HAL_RCC_OscConfig(&RCC_OscInitStruct) 调用之前的 SystemClock_Config_fromSTOP() 中添加以下行: RCC_OscInitStruct.PLL.PLLM = 4; 2) 重写 SystemClock_Config() 函数以使用 HSI 代替 MSI 并设置以上参数 PLLSource = HSI, PLLM = 4, PLLN = 55, PLLR = 2(优选方案)。 当然,这是最大的。CPU频率110MHz,如果想使用更低的频率,可以调整数值。 我还建议在 main() 的开头添加以下两行: DBGMCU->CR &= ~DBGMCU_CR_DBG_STOP; DBGMCU->CR &= ~DBGMCU_CR_DBG_STANDBY; 这将在 STOP 和 STANDBY 模式下禁用调试。一些 IDE 会自动启用此功能,之后设备将由于 SysTick 中断而从 STOP 模式唤醒(前提是 SysTick 已激活且其中断已启用)。应用此配置可能需要重启。 您可以在调试期间在 DBGMCU->CR 中检查这些值。但这是一个不同的故事。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1447 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1494 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3641 浏览 1 评论
3834 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2454 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
727浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
658浏览 5评论
710浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
940浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
744浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 17:25 , Processed in 0.714315 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
549