完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CH32V203 中 CAN 在测试模式中,比如开启静默环回模式。重新进入初始化模式,对寄存器 CAN_BtiMR 的 SILM 和 LBKM 位置0(寄存器置0成功),退出初始化模式,静默环回模式依旧存在,需重新上下电才能恢复,请问这是特性吗?
/* 官方程序 */ uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct) { uint8_t InitStatus = CAN_InitStatus_Failed; uint32_t wait_ack = 0x00000000; CANx->CTLR &= (~(uint32_t)CAN_CTLR_SLEEP); CANx->CTLR |= CAN_CTLR_INRQ ; while (((CANx->STATR & CAN_STATR_INAK) != CAN_STATR_INAK) && (wait_ack != INAK_TIMEOUT)) { wait_ack++; } if ((CANx->STATR & CAN_STATR_INAK) != CAN_STATR_INAK) { InitStatus = CAN_InitStatus_Failed; } else { if (CAN_InitStruct->CAN_TTCM == ENABLE) { CANx->CTLR |= CAN_CTLR_TTCM; } else { CANx->CTLR &= ~(uint32_t)CAN_CTLR_TTCM; } if (CAN_InitStruct->CAN_ABOM == ENABLE) { CANx->CTLR |= CAN_CTLR_ABOM; } else { CANx->CTLR &= ~(uint32_t)CAN_CTLR_ABOM; } if (CAN_InitStruct->CAN_AWUM == ENABLE) { CANx->CTLR |= CAN_CTLR_AWUM; } else { CANx->CTLR &= ~(uint32_t)CAN_CTLR_AWUM; } if (CAN_InitStruct->CAN_NART == ENABLE) { CANx->CTLR |= CAN_CTLR_NART; } else { CANx->CTLR &= ~(uint32_t)CAN_CTLR_NART; } if (CAN_InitStruct->CAN_RFLM == ENABLE) { CANx->CTLR |= CAN_CTLR_RFLM; } else { CANx->CTLR &= ~(uint32_t)CAN_CTLR_RFLM; } if (CAN_InitStruct->CAN_TXFP == ENABLE) { CANx->CTLR |= CAN_CTLR_TXFP; } else { CANx->CTLR &= ~(uint32_t)CAN_CTLR_TXFP; } CANx->BTIMR = (uint32_t)((uint32_t)CAN_InitStruct->CAN_Mode << 30) | ((uint32_t)CAN_InitStruct->CAN_SJW << 24) | ((uint32_t)CAN_InitStruct->CAN_BS1 << 16) | ((uint32_t)CAN_InitStruct->CAN_BS2 << 20) | ((uint32_t)CAN_InitStruct->CAN_Prescaler - 1); CANx->CTLR &= ~(uint32_t)CAN_CTLR_INRQ; wait_ack = 0; while (((CANx->STATR & CAN_STATR_INAK) == CAN_STATR_INAK) && (wait_ack != INAK_TIMEOUT)) { wait_ack++; } if ((CANx->STATR & CAN_STATR_INAK) == CAN_STATR_INAK) { InitStatus = CAN_InitStatus_Failed; } else { InitStatus = CAN_InitStatus_Success ; } } return InitStatus; } |
|
相关推荐
2个回答
|
|
您好,CH32V203 CAN有3种工作模式:初始化模式、睡眠模式和正常模式3种模式。只能在初始化模式下修改CAN_BTIMR 的 SILM 和 LBKM位配置来选择一种测试模式,测试模式有3种:静默模式,环回模式,静默环回模式。若要切换工作模式,需要对寄存器CAN_CTLR 中的 SLEEP 或 INRQ 位进行操作切换3种工作模式,具体可参考CH32V203应用手册介绍,如下图。
|
|
|
|
您好,CH32V203 CAN有3种工作模式:初始化模式、睡眠模式和正常模式3种模式。只能在初始化模式下修改CAN_BTIMR 的 SILM 和 LBKM位配置来选择一种测试模式,测试模式有3种:静默模式,环回模式,静默环回模式。若要切换工作模式,需要对寄存器CAN_CTLR 中的 SLEEP 或 INRQ 位进行操作切换3种工作模式,具体可参考CH32V203应用手册介绍,如下图。
|
|
|
|
只有小组成员才能发言,加入小组>>
490 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2880 浏览 2 评论
2369 浏览 1 评论
832浏览 2评论
511浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
376浏览 1评论
657浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
394浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 04:59 , Processed in 1.047161 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号