完善资料让更多小伙伴认识你,还能领取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应用手册介绍,如下图。
|
|
|
|
只有小组成员才能发言,加入小组>>
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2616 浏览 2 评论
2143 浏览 1 评论
ch554g的板子准备烧录程序,用串口总是显示等待设备连接是为啥
1017浏览 14评论
请问ch32v307用ch-link调试或者读写有什么特殊操作方法吗?
916浏览 13评论
Windows系统下如何确定COM口为CH340/CH341设备?
2249浏览 12评论
693浏览 12评论
CH32V307以太网接近满速后,几秒或几十秒后就死机怎么解决?
1980浏览 11评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-9 06:07 , Processed in 0.766269 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号