关于stm32F4CAN总线调试
生活随笔
收集整理的這篇文章主要介紹了
关于stm32F4CAN总线调试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于CAN總線仲裁問題
1. 硬件配置
單片機 stm32F412ret6
CAN接口芯片 SN65HVD230DR
外部晶振 8M
2 芯片CAN初始化
系統時鐘配置使用cubeMX進行配置,按照最大時鐘速度進行配置,can系統時鐘頻率為50MHz
重點:
之前can速率使用250kHz,兩臺設備對著發送數據,總線仲裁總是出現問題
后來看過一篇MCP2517的文章
- 這篇文章提到 1Mbps的仲裁比特率,8Mbps的數據比特率。
- 也就是說不是所有時鐘都可以有仲裁功能,can時鐘越低,總線仲裁成功率越高。
- 后來,我將stm32F4的can總線時鐘改成125kHz,兩臺設備對著發送,數據就不會相互沖突
- 電平略高的是用TJF1051T/3的接口芯片發送的,連續發送3組數據
- 電平略低的是用SN65HVD230DR的接口芯片發送的,連續發送3組數據
- 從波形上看,2對數據在can總線上,數據相互穿插,可以表明stm32f4芯片互相之間可以有效的進行仲裁
3. 啟動總線錯誤中斷
如果不啟動總線錯誤中斷,有可能出現錯誤,通過函數查不到相應的錯誤
HAL_CAN_ActivateNotification(&hcan1,CAN_IT_ERROR_WARNING);HAL_CAN_ActivateNotification(&hcan1,CAN_IT_ERROR_PASSIVE);HAL_CAN_ActivateNotification(&hcan1,CAN_IT_BUSOFF);HAL_CAN_ActivateNotification(&hcan1,CAN_IT_LAST_ERROR_CODE);HAL_CAN_ActivateNotification(&hcan1,CAN_IT_ERROR);4當總線出現故障后,系統內部復位錯誤,修復故障方法
bCANGetError = HAL_CAN_GetError(&hcan1);//查詢can錯誤代碼 bCanGetState = HAL_CAN_GetState(&hcan1); if( bCANGetError!=0 ) //當系統出現錯誤,錯誤修復 {HAL_CAN_ResetError(&hcan1); }5. 發送代碼
CAN_TxHeaderTypeDef TxHeader;//發送配置結構體 TxHeader.StdId = 0x121;//標準幀地址 TxHeader.ExtId = 0x01;//擴展幀發送地址 TxHeader.RTR = CAN_RTR_DATA;//發送數據 TxHeader.IDE = CAN_ID_EXT;//擴展幀 TxHeader.DLC = 8;//發送8個字節數據 TxHeader.TransmitGlobalTime = DISABLE; //啟動時間戳 ENABLE DISABLE for(;HAL_CAN_GetTxMailboxesFreeLevel(&hcan1)==0;);//檢查發送郵箱是否有空閑 TxHeader.ExtId = 0x100001;//擴展幀地址 bCAN_Tx = HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox);//發送 __nop();for(;HAL_CAN_GetTxMailboxesFreeLevel(&hcan1)==0;);//檢查發送郵箱是否有空閑 TxHeader.ExtId = 0x100002;//擴展幀地址 bCANGetError = HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox);//發送 __nop();for(;HAL_CAN_GetTxMailboxesFreeLevel(&hcan1)==0;);//檢查發送郵箱是否有空閑 TxHeader.ExtId = 0x100003;//擴展幀地址 bCANGetError = HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox);//發送 __nop();6. 關于can接口芯片的問題
- 當使用兩種不同電壓的接口芯片,會出現雜波
- 一種是TJF1051T/3的接口芯片,5v CAN接口芯片
- 一種是SN65HVD230DR的接口芯片,3.3v CAN接口芯片
- 當使用同一種接口芯片TJF1051T/3
- 從波形上看,雜波明顯消失
- 雖然可以同時使用5v或者3.3v的can接口芯片,但是使用5v的接口芯片,雜波明顯消失
總結
以上是生活随笔為你收集整理的关于stm32F4CAN总线调试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于iar加st-link,报出SWIM
- 下一篇: CAN接口芯片SN65HVD230DR波