void CAN_DeInit(CAN_TypeDef* CANx) { /* Enable CAN1 reset state */ RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, ENABLE); /* Release CAN1 from reset state */ RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, DISABLE); 我开始使用的是静默环回模式,想要切换成其他模式 发现加上 CAN_DeInit后就可以正常切换了 不太懂什么原理,这个开关时钟的意义是什么?为什么这样操作后就能正常切换CAN的模式了呀? |
从函数描述上看,这是对CAN外设的一个复位。 复位后就可以进入CAN外设的,初始化模式,才可以正确的配置各种寄存器。 可以参考手册,只有CAN 进入初始化模式才可以配置关键的寄存器。所以这个两个函数使得CAN回到了起始状态了。
你有所误会。这里不是开关CAN外设的时钟,而是对CAN外设做了强行做了复位。 这个动作在外设功能状态切换时常常会用到,这样让外设先从之前的工作状态回到复位后初始状态状态,然后进行新的配 置,这样做的好处该是不言而喻了吧,我就不啰嗦了。
懂了,感谢大佬们。