中國建設銀行余額查詢?nèi)肟趕eo推廣人員
第一章 STM32 CubeMX (CAN通信)基礎篇
文章目錄
- 第一章 STM32 CubeMX (CAN通信)基礎篇
- STM32中文手冊簡介
- 簡介
- stm32f1系列CAN的特點
- CAN連接網(wǎng)絡示意圖
- 硬件電路
- CAN波特率計數(shù)
- 一、 STM32 CubeMX設置
- 設置波特率
- 工程目錄結(jié)構(gòu)
- 添加CAN驅(qū)動代碼
- 主函數(shù)添加代碼
- 實驗現(xiàn)象
- 總結(jié)
STM32中文手冊簡介
簡介
stm32f1系列CAN的特點
CAN連接網(wǎng)絡示意圖
CAN收發(fā)器是外接器件,(例如:TJA1050)作用:把差分信號轉(zhuǎn)換為MCU能能識別的TTL信號。
硬件電路
CAN波特率計數(shù)
一、 STM32 CubeMX設置
設置波特率
工程目錄結(jié)構(gòu)
添加CAN驅(qū)動代碼
CAN_TxHeaderTypeDef TxHeader; //發(fā)送
CAN_RxHeaderTypeDef RXHeader;
uint8_t TXmessage[8] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77};
uint8_t RXmessage[8];
uint32_t pTxMailbox = 0;
uint8_t CAN1_Send_Msg(uint8_t* msg,uint8_t len)
{ uint8_t i=0;uint32_t TxMailbox;uint8_t message[8];TxHeader.StdId=0X12; //標準標識符TxHeader.ExtId=0x12; //擴展標識符(29位)TxHeader.IDE=CAN_ID_STD; //使用標準幀TxHeader.RTR=CAN_RTR_DATA; //數(shù)據(jù)幀TxHeader.DLC=len; for(i=0;i<len;i++){message[i]=msg[i];}if(HAL_CAN_AddTxMessage(&hcan, &TxHeader, message, &TxMailbox) != HAL_OK)//發(fā)送{return 1;}while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) != 3) {}return 0;
}void MX_CAN1_Init(void)
{hcan.Instance = CAN1;hcan.Init.Prescaler = 9;hcan.Init.Mode = CAN_MODE_NORMAL;hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;hcan.Init.TimeSeg1 = CAN_BS1_5TQ;hcan.Init.TimeSeg2 = CAN_BS2_2TQ;hcan.Init.TimeTriggeredMode = DISABLE;hcan.Init.AutoBusOff = ENABLE;hcan.Init.AutoWakeUp = ENABLE;hcan.Init.AutoRetransmission = DISABLE;hcan.Init.ReceiveFifoLocked = DISABLE;hcan.Init.TransmitFifoPriority = DISABLE;if (HAL_CAN_Init(&hcan) != HAL_OK){Error_Handler();}CAN_FilterTypeDef sFilterConfig;sFilterConfig.FilterActivation = ENABLE;//打開過濾器sFilterConfig.FilterBank = 0;//過濾器0 這里可設0-13sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;//采用掩碼模式sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;//采用32位掩碼模式sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;//采用FIFO0sFilterConfig.FilterIdHigh = 0x0000; //設置過濾器ID高16位sFilterConfig.FilterIdLow = 0x0000;//設置過濾器ID低16位sFilterConfig.FilterMaskIdHigh = 0x0000;//設置過濾器掩碼高16位sFilterConfig.FilterMaskIdLow = 0x0000;//設置過濾器掩碼低16位if(HAL_CAN_ConfigFilter(&hcan,&sFilterConfig) != HAL_OK)//初始化過濾器{Error_Handler();}if(HAL_CAN_Start(&hcan) != HAL_OK)//打開can{Error_Handler();}if(HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)//開啟接受郵箱0掛起中斷{Error_Handler();}}void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)//接受郵箱0掛起中斷回調(diào)函數(shù)
{if(hcan->Instance==CAN1){HAL_CAN_GetRxMessage(hcan,CAN_FILTER_FIFO0,&RXHeader,RXmessage);//獲取數(shù)據(jù)}}
主函數(shù)添加代碼
實驗現(xiàn)象
總結(jié)
提示:這里對文章進行總結(jié):
例如:以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了stm32 CAN的使用,而stm32 CAN提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。