1. 程式人生 > >STM32CubeMX生成基於HAL庫的Can收發配置

STM32CubeMX生成基於HAL庫的Can收發配置

HAL庫 的應該用比較新潮,經常找不到資料。今天說說,在CAN開發中的應用。

一,傳送。

static HAL_StatusTypeDef Can_MsgSend(uint32_t ID,uint8_t * pData,uint8_t len)
{
HAL_StatusTypeDef retSTD;
canTxMsg.StdId=ID;//0x500|(GetLocalID()&0xFF);
canTxMsg.IDE=CAN_ID_STD;
canTxMsg.RTR=CAN_RTR_DATA;
canTxMsg.DLC=len;
memcpy(canTxMsg.Data,pData,len);
SendErrorCount=0;

retSTD= HAL_CAN_Transmit(&hcan,200);
//retSTD= HAL_CAN_Transmit_IT(&hcan);
 
return retSTD;  

}

二,配置。

//基本配置

hcan.Instance = CAN;
  hcan.Init.Prescaler =138;// 100;
  hcan.Init.Mode =CAN_MODE_NORMAL;//CAN_MODE_LOOPBACK;// 
  hcan.Init.SJW = CAN_SJW_1TQ;
  hcan.Init.BS1 = CAN_BS1_7TQ;
  hcan.Init.BS2 = CAN_BS2_8TQ;
  hcan.Init.TTCM = DISABLE;
  hcan.Init.ABOM = DISABLE;
  hcan.Init.AWUM = DISABLE;
  hcan.Init.NART = DISABLE;
  hcan.Init.RFLM = DISABLE;
  hcan.Init.TXFP = DISABLE;
  if (HAL_CAN_Init(&hcan) != HAL_OK)
  {
    Error_Handler();
  }

//過濾器 

CAN_FilterConfTypeDefftcan;
ftcan.FilterIdHigh=0x0000;
ftcan.FilterIdLow=0x0000;
ftcan.FilterScale=CAN_FILTERSCALE_16BIT;
ftcan.FilterMaskIdHigh=0xFFFF;
ftcan.FilterMaskIdLow=0x0000;
ftcan.FilterMode=CAN_FILTERMODE_IDMASK;
 ftcan.FilterFIFOAssignment=CAN_USEFIFO;
ftcan.FilterNumber=0;
ftcan.FilterActivation=ENABLE;


HAL_CAN_ConfigFilter(&hcan, &ftcan);

//收發 緩衝

 hcan.pRxMsg=&canRxMsg; 
hcan.pTxMsg=&canTxMsg;  

三,回撥函式

void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan);
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan);
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan);

四,設定中斷接收.

HAL_CAN_Receive_IT(&hcan,CAN_USEFIFO); 每次接收中斷中,要重新設定。

相關推薦

STM32CubeMX生成基於HALCan收發配置

HAL庫 的應該用比較新潮,經常找不到資料。今天說說,在CAN開發中的應用。 一,傳送。 static HAL_StatusTypeDef Can_MsgSend(uint32_t ID,uint8_t * pData,uint8_t len) {HAL_StatusTyp

STM32F1XX系列 HAL CAN大量收發資料

大量收發資料時,會產生收發資料0-3分鐘後不再收發資料的現象,此時是由於庫函式內部將CAN匯流排狀態改為忙碌。可在While(1)中填寫如下程式碼if( HAL_BUSY == HAL_CAN_Receive_IT(hcanx, CAN_FIFO0))//開啟中斷接收  { 

STM32F072從零配置工程-基於HAL的串列埠UART中斷配置

先上一個採用串列埠直接傳輸的Demo; 此處的思路是完全採用HAL庫來實現的,核心是運用HAL_UART_Transmit_IT和HAL_UART_Receive_IT兩個函式來實現的,可以作為一個Demo來測試使用; 直接上程式碼,其串列埠的配置和上一章完全一致,因此忽略不計:   

STM32CubeMX生成基於Eclipse的GCC工程(一)(工程模板用Jlink進行SWD單步除錯)

首先,新建STM32Cube工程,在SYS選單下選擇 Serial Wire。 進入工程選單下的設定介面更改Toolchain/IDE為TrueSTUDIO 點選工程-生成程式碼,可以看到生成的檔案 接下來新建一個eclipse空的C工程 新建工程成功後,把STM3

【巨窩】stm32c8t6 驅動ssd1306 oled IIC顯示屏,HAL,cubeMX配置

前言和介紹     第一篇博文。看了國內很多硬體部落格,對半路出家的人來說學學習成本高,不否認從底層學起能夠掌握更深層次內容,但效率和耐心也是影響專案進度的因素。所以就暴力入門,複製黏貼,圖多費話少。第一步不管io口中斷,也不點led燈,也沒有ADC。先把螢幕點了再說,這樣

基於HAL處理UART中斷並接收串列埠傳入的資料

研究了下HAL庫,在百度上面找發現很多UART串列埠接收,串列埠中斷處理是從USART那邊直接抄過來的,使用的是標準庫一類的,在用HAL庫配置的工程中完全沒法使用,另闢蹊徑,通過在文件中翻找HAL打頭的函式發現已經有十分簡單的封裝了。 正確的獲取接收資料的方法是: 1.

使用cmake生成基於靜態的動態連結

在軟體開發過程中,有時候需要基於靜態庫生成動態庫檔案。 ld執行時,預設會把靜態庫中不使用的函式過濾掉,導致生成的動態庫檔案不能包含所有的函式。所以需要配置ld的選項--whole-archi

如何使用cmake生成基於靜態的動態連結

    在工程搭建時,可能會有將靜態庫連結成動態庫的需求,如出於程式碼保護的角度,某些模組會發布.a副檔名的靜態庫,我們要將多個這樣的靜態庫連結成一個動態庫。但與直接link目標檔案不同的是,ld以預設引數執行時,並把靜態庫中沒有用到的函式過濾掉,導致生成的so並未包含所要

基於HAL的STM32的DSP詳解(附FFT應用)

1 . 建立工程,生成程式碼時選擇包含所有庫。   2. 開啟 option for target 選擇 Target 標籤,在code generatio中,將floating point hardware 選擇 USE Single Precision。   3. &nb

STM32系統時鐘RCC(基於HAL

基礎認識 為什麼要有時鐘: 時鐘就是微控制器的心臟,其每跳動一次,整個微控制器的電路就會同步動作一次。時鐘的速率決定了兩次動作的間隔時間。速率越快,微控制器在單位時間內所執行的動作將越多。時鐘是微控制器執行的基礎,時鐘訊號推動微控制器內各個部分執行相應的指令。時鐘系統就是CPU的脈搏,決定cpu速率。 &nb

STM32 GPIO輸入輸出(基於HAL

一、基礎認識 GPIO全名為General Purpose Input Output,即通用輸入輸出。有時候簡稱為“IO口”。通用,說明它是常見的。輸入輸出,就是說既能當輸入口使用,又能當輸出口使用。埠,就是元器件上的一個引腳。 輸入模式和輸出模式是GPIO的基本特性,當然GPIO還有

STM32 GPIO詳細篇(基於HAL

一、基礎認識 GPIO全名為General Purpose Input Output,即通用輸入輸出。有時候簡稱為“IO口”。通用,說明它是常見的。輸入輸出,就是說既能當輸入口使用,又能當輸出口使用。埠,就是元器件上的一個引腳。 輸入模式和輸出模式是GPIO的基本特性,當然GPIO還有

STM32 定時器(基於HAL

l  16位的向上、向下、向上/向下(中心對齊)計數模式,支援自動重灌載 l  16位的預分頻器 l  每個定時器都有多個獨立通道,每個通道可用於 *  輸入捕獲 *  輸出比較 *  PWM輸出 *  單脈衝模式 l  高階定時

STM32 ADC詳細篇(基於HAL

一、基礎認識 ADC就是模數轉換,即將模擬量轉換為數字量   l  解析度,讀出的資料的長度,如8位就是最大值為255的意思,即範圍[0,255],12位就是最大值為4096,即範圍[0,4096] l  通道,ADC輸入引腳,通常一個ADC控制器控制多個通道,如果需要多通道的

基於STM32F429和HALCAN收發例程

1.CAN協議介紹   CAN 是 Controller Area Network 的縮寫(以下稱為 CAN),是 ISO 國際標準化的序列通訊協議。在當前的汽車產業中,出於對安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統被開發了出來。由於這些系統之間通訊所用的資料型別及對可靠性的要求不

【書籍連載】《STM32 HAL 開發實戰指南—基於F7》-第一章

第三部分 http 使用方法 參考 必須 並不會 簡介 過程 學習過程 從今天起,每天開始連載一章《STM32 HAL 庫開發實戰指南—基於F7》。歡迎各位閱讀、點評、學習。 第1章 如何使用本書 1.1 本書的參考資料 本書參考資料為:《STM32F76xxx參考手冊

基於STM32,低速CAN通訊的收發器晶片選擇問題

本電路系統第一版測試電路使用的CAN收發器晶片為philips公司生產的TJA1050,電路參考了戰艦STM32開發版的電路,如下圖。 電路測試沒有問題,但是效能不能滿足工程要求。經測試在STM32F103C8T6晶片上,工作於24MHZ,在程式碼中設定SJW,BS2,BS

STM32 HAL學習(一) STM32CubeMX和TRUEStudio的使用

最近開始學習STM32的HAL庫,之前有用過std庫函式做STM32開發的基礎,因此學習HAL庫會更容易上手一些,但對於新的程式設計、下載工具以及HAL庫仍有許多不清晰的地方。經過初步的實驗實現點亮LED燈和串列埠的傳送資料之後,對所用到的幾個工具以及HAL庫進行一個總結。

官方生成的MCU程式碼(hal)移植到標準的STM32教程

前言 手頭上正好有STM32的開發板和ESP-12E模組,想著控制個WS2812玩玩。到MCU開發的時候下載了生成的程式碼發現是HAL庫的,無奈自己剛剛學習stm32,用的是標準庫 ,在論壇發現關於STM32CubeMX移植的教程滿天飛,標準庫卻寥寥無幾,發現有很多群友和

STM32CUBEMXHAL 的 Timeout=1 異常分析

背景 STM32CUBEMX 在生成的庫函式,基本上都有輸入引數 Timeout。 比如說: HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t