stm32 RCC_CR上电为啥不是复位0X0000xx83值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32 RCC_CR上电为啥不是复位0X0000xx83值?相关的知识,希望对你有一定的参考价值。
复位值是24M的吧,我用72M SystemInit()的下载程序,闪灯。然后屏蔽//SystemInit() 72M的,再下载,闪灯也是72M闪的,为什么不是24M闪的?
你的问题描述能力有待提高.什么叫做复位值24M?如果你要表达0x24000000请用16进制写出来,别写的让人笑掉大牙. SystemInit()是库函数吗?如果不是谁知道你怎么初始化系统的,你不会把程序贴上来吗? 闪灯也是72M闪的?什么叫72M闪? 完全是在自言自语, 连个问题都描述不清楚还学个毛.RCC_CR复位值是0x0000XX83, RCC是时钟, 如果你要点灯, 你要打开RCC中的GPIO时钟, 如果你需要闪烁LED, 你需要加入延时, 延时可以使用定时器, 也可以用systick. 每个工程创建的时候一定要加入 启动程序, 否则会出现各种错误.另外RCC在初始化之前最好先调用 RCC_DeInit()库函数复位一下(也可以自己操作寄存器).追问
谢谢,前途一片黑暗,不学了。
参考技术A RCC_CR复位值是0x0000XX83, RCC是时钟, 如果要点灯, 要打开RCC中的GPIO时钟, 如果需要闪烁LED, 你需要加入延时, 延时可以使用定时器, 也可以用systick. 每个工程创建的时候一定要加入 启动程序, 否则会出现各种错误.另外RCC在初始化之前最好先调用 RCC_DeInit()库函数复位一下(也可以自己操作寄存器)。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-0内核(ST's product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost 8-bit MCUs up to 32-bit ARM-based Cortex®-M0 and M0+, Cortex®-M3, Cortex®-M4 Flash microcontrollers with a great choice of peripherals. ST has also extended this range to include an ultra-low-power MCU platform) 。按内核架构分为不同产品:
STM32H7 LAN8742 LwIP只有上电后才能正常工作,复位后不行
【中文标题】STM32H7 LAN8742 LwIP只有上电后才能正常工作,复位后不行【英文标题】:STM32H7 LAN8742 LwIP only works fine after power-up, not after reset 【发布时间】:2019-08-11 03:45:56 【问题描述】:我手头有一个奇怪的问题,我以前从未见过。 然而,我仍在试图找出问题所在。 我有一个 STM32H753VIT 和一个 LAN8742 以太网控制器连接到它。 我在 NO-SYS 模式下运行 LwIP。 它仅在冷启动后才能正常工作,但在硬件重置(按钮或 ST-LINK 探头)后不能正常工作。 它运行一个简单的 TCP 回显服务器。如果它运行,我可以 ping 它,它会响应 TCP 客户端。
但在硬件重置后,我无法再 ping 它,并且它没有作为回显服务器响应。 我注意到接口上的绿色(链接)LED 将在重置后保持熄灭。
我可以看到 LAN8742_Init 函数在硬件复位后成功执行,但它看到函数 low_level_input 中不再有可用的 RX 数据。
在 Nucleo-H743ZI 上,我运行相同的代码,这在硬件重置后也可以工作。 请注意,代码仅略有不同,因为引脚映射略有不同。 运行良好的 Nucleo-H743ZI 代码: https://github.com/bkht/Nucleo-H743ZI_LAN8742_LwIP_NO-SYS STM32H753VIT 行为异常的代码: https://github.com/bkht/STM32H753VIT_LAN8742_LwIP_NO-SYS
MCU的nRST连接到LAN8742A的nRST,并使用一个100nF的电容接地。我有一个复位开关,我尝试了一个上拉电阻,但运气不好。 我添加了一个重置按钮,这发现更长的硬件重置也不起作用。
我正在考虑时间或内存内容的方向。 有没有人见过这样的启动行为?
【问题讨论】:
您是否查看了 LAN8742A 的数据表以了解所需的最小复位脉冲时间?过去我遇到过这个确切的问题,我有相同的硬件布局 - STM 的 nRST 和 PHY 的 RST 已连接,并且它们已连接到调试器连接器。就我而言,PHY 需要比 STM 更长的复位脉冲,这会导致它有时“锁定”,除非完成更长的复位脉冲。 您可能还想检查所需的最小复位脉冲时间,并将其与 STM 在执行“软件”复位(看门狗、内核复位,例如通过NVIC_SystemReset
)时在 nRST 上生成的脉冲进行比较.如果它比 STM 的输出长,您以后可能会在现场遇到问题,例如执行固件升级和执行软件重置。
感谢您的回复!是的,我也想过这个,加了个reset按钮,发现再长的硬件reset也不行。只是为了测试,虽然没有它复位会变高,但我尝试了各种值的上拉电阻,但没有运气。
我终于解决了。这是一个软件问题。或者实际上 HW 中的皮带似乎是错误的,我在 SW 中解决了这个问题。通过在代码中添加一行。 LAN8942A 软件复位后,我在 BCR (0x00) 寄存器中设置了自动协商位(位 12)。我会在github上更新代码,给有兴趣的人。
请不要在标题中添加 SOLVED。见meta.stackexchange.com/questions/116101/…。相反,请在下面回答您的问题。
【参考方案1】:
已解决,在执行 LAN8942A 软件复位的代码后,我添加了一行来设置 BCR (0x00) 寄存器中的自动协商位(第 12 位)。
pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_AUTONEGO_EN);
我会在github上更新代码,给有兴趣的人。
【讨论】:
欢迎来到 Stack Overflow。在时间限制过去(我认为是 2 小时)后,您将能够接受自己的答案并获得一些免费代表。同时,请点赞,欢迎来到 SO。以上是关于stm32 RCC_CR上电为啥不是复位0X0000xx83值?的主要内容,如果未能解决你的问题,请参考以下文章