一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

教程:如何用STM32-CubeMX-實(shí)現(xiàn)CAN通訊

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2020-09-30 17:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

首先要安裝cubemx跟Keil5兩個編程軟件,然后打開cubemx軟件,新建一個工程項(xiàng)目:

輸入CPU型號:

在右下角雙擊CPU具體型號:

稍等片刻會打開如下對話框:

首先要配置系統(tǒng)的調(diào)試方式:我們選擇SW方式,

然后配置晶振源,這里選擇的是外部晶振,8M,

使能看門狗,

使能CAN,

使能TIM2時鐘源,采用內(nèi)部時鐘,

配置完成后可以看到單片機(jī)管腳已經(jīng)做了配置。

切換到Clock Configuration選項(xiàng)卡,配置時鐘周期,這里配置為8M

切換到Configuration選項(xiàng)卡,進(jìn)入CAN配置選項(xiàng)配置波特率如下為500Kbps。

配置接收中斷。

配置定時器如下為1ms定時器。

配置定時器中斷

配置完成后點(diǎn)擊保存,然后點(diǎn)擊如下按鈕,生成代碼

填寫工程名稱,路徑,編程軟件等等

選擇生成代碼的方式

等待……

之后點(diǎn)擊打開項(xiàng)目。代碼生成部分完成。

添加一些特殊配置和邏輯代碼,添加CAN的配置信息函數(shù)。

void Can_Config(void){ hcan.pTxMsg = &TxMessage; hcan.pRxMsg = &RxMessage; /*##-1- Configure CAN1 Transmission Massage #####################################*/ hcan.pTxMsg->StdId = 0x123; hcan.pTxMsg->RTR = CAN_RTR_DATA; hcan.pTxMsg->IDE = CAN_ID_STD; hcan.pTxMsg->DLC = 8; /*##-2- Configure the CAN1 Filter ###########################################*/ sFilterConfig.FilterNumber = 0; sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale = CAN_FILTERSCALE_16BIT; sFilterConfig.FilterIdHigh = 0; sFilterConfig.FilterIdLow = 0; sFilterConfig.FilterMaskIdHigh = 0; sFilterConfig.FilterMaskIdLow = 0; sFilterConfig.FilterFIFOAssignment = CAN_FIFO0; sFilterConfig.FilterActivation = ENABLE; sFilterConfig.BankNumber = 14; HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);}

在Main函數(shù)中while(1)之前調(diào)用一下即可,添加定時器啟動函數(shù):

HAL_TIM_Base_Start_IT(&htim2);

CAN接收中斷啟動函數(shù):

HAL_CAN_Receive_IT(&hcan, CAN_FIFO0);/* USER CODE BEGIN 2 */ Can_Config(); //Can配置信息HAL_TIM_Base_Start_IT(&htim2); //定時器啟動HAL_CAN_Receive_IT(&hcan, CAN_FIFO0);//使能Can接收中斷 /* USER CODE END 2 */

打開stm32f1xx_it.c文件,找到如下函數(shù),添加接收中斷啟動函數(shù):

HAL_CAN_Receive_IT(&hcan, CAN_FIFO0);

注意:接收中斷啟動函數(shù)使能一次只進(jìn)一次中斷,所以中斷退出前要再次使能。

void USB_LP_CAN1_RX0_IRQHandler(void){ /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */ /* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */ HAL_CAN_IRQHandler(&hcan); /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1 */ HAL_CAN_Receive_IT(&hcan, CAN_FIFO0);//ê1?üCAN?óê? /* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */}

添加CAN接收服務(wù)函數(shù):

HAL_CAN_RxCpltCallback

說明:該函數(shù)在stm32f1xx_hal_can.c文件中已經(jīng)有定義,它的定義方式如下:

__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan)

函數(shù)前面的__weak關(guān)鍵字意思是如果有同樣的定義,先執(zhí)行沒有__weak關(guān)鍵字的函數(shù),所以當(dāng)我們定義了HAL_CAN_RxCpltCallback函數(shù)后,編譯器會先編譯我們定義的函數(shù),而忽略系統(tǒng)定義的該函數(shù)。當(dāng)我們沒有定義該函數(shù)時,系統(tǒng)會編譯帶有__weak關(guān)鍵字的函數(shù)。

void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan){ unsigned short int speed; switch(hcan->pRxMsg->StdId) {//根據(jù)ID處理數(shù)據(jù) case 0x123:// /*在此添加數(shù)據(jù)處理邏輯*/ break; default: break; }}

添加CAN發(fā)送函數(shù):

/* USER CODE BEGIN WHILE */ while (1) { HAL_IWDG_Refresh(&hiwdg); //喂狗函數(shù) if(Can_Trans_Timer == 0) {//每100ms發(fā)送一次數(shù)據(jù) Can_Trans_Timer = 100; hcan.pTxMsg->StdId = 0x123; hcan.pTxMsg->Data[0] = 'C'; hcan.pTxMsg->Data[1] = 'A'; hcan.pTxMsg->Data[2] = 'N'; hcan.pTxMsg->Data[3] = ' '; hcan.pTxMsg->Data[4] = 'T'; hcan.pTxMsg->Data[5] = 'E'; hcan.pTxMsg->Data[6] = 'S'; hcan.pTxMsg->Data[7] = 'T'; HAL_CAN_Transmit(&hcan, 200);//發(fā)送一幀數(shù)據(jù) } } /* USER CODE END WHILE */

在定時器函數(shù)中添加定時器代碼:

void TIM2_IRQHandler(void){ /* USER CODE BEGIN TIM2_IRQn 0 */ if(Can_Trans_Timer > 0) Can_Trans_Timer--; /* USER CODE END TIM2_IRQn 0 */ HAL_TIM_IRQHandler(&htim2); /* USER CODE BEGIN TIM2_IRQn 1 */ /* USER CODE END TIM2_IRQn 1 */}

說明:在往工程中添加代碼時要注意,不要任意往里面添加代碼,要在注釋著USER CODE BEGIN的地方添加代碼,這樣在重新生成代碼時才不至于將已經(jīng)寫好的代碼覆蓋掉,如下

/* USER CODE BEGIN Includes */

責(zé)任編輯:xj

原文標(biāo)題:STM32-CubeMX-實(shí)現(xiàn)CAN通訊

文章出處:【微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標(biāo)題:STM32-CubeMX-實(shí)現(xiàn)CAN通訊

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Profinet轉(zhuǎn)CAN網(wǎng)關(guān)模塊對實(shí)現(xiàn)西門子PLC與CAN變頻器協(xié)同通信的助力研究

    在智能物流倉儲系統(tǒng)中,AGV等設(shè)備的通訊網(wǎng)絡(luò)穩(wěn)定性和實(shí)時性至關(guān)重要。通過Profinet轉(zhuǎn)CAN網(wǎng)關(guān),可以實(shí)現(xiàn)中控系統(tǒng)(如西門子PLC,支持ProFiNet協(xié)議)與伺服驅(qū)動器(支持CAN
    的頭像 發(fā)表于 06-09 14:59 ?235次閱讀
    Profinet轉(zhuǎn)<b class='flag-5'>CAN</b>網(wǎng)關(guān)模塊對<b class='flag-5'>實(shí)現(xiàn)</b>西門子PLC與<b class='flag-5'>CAN</b>變頻器協(xié)同通信的助力研究

    STM32F103TBU6 封裝是VFQFPN36 將PD0和PD1配置成CAN不成功是什么原因?

    規(guī)格書上可以配置成CAN, 程序配置好后發(fā)現(xiàn)發(fā)送數(shù)據(jù)沒有郵箱。然后在STM32CubeMX軟件進(jìn)CAN配置發(fā)現(xiàn)STM32F103TBU6封裝是VFQFPN36PD0和PD1沒有
    發(fā)表于 06-06 06:42

    STM32F103TBU6封裝是VFQFPN36,將PD0和PD1配置成CAN不成功是什么原因?

    規(guī)格書上可以配置成CAN, 程序配置好后發(fā)現(xiàn)發(fā)送數(shù)據(jù)沒有郵箱。然后在STM32CubeMX軟件進(jìn)CAN配置發(fā)現(xiàn)STM32F103TBU6封裝是VFQFPN36PD0和PD1沒有
    發(fā)表于 04-27 08:41

    CAN總線通訊原理-原來這么簡單!#總線通訊 #總線傳輸 #汽車CAN總線? #電路知識

    CAN總線
    安泰小課堂
    發(fā)布于 :2025年04月24日 17:31:16

    STM32開發(fā)入門進(jìn)階必備!《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL庫》新書發(fā)布!

    近日,由華清遠(yuǎn)見教育科技集團(tuán)精心編撰的教育部高等學(xué)校電子信息類專業(yè)教學(xué)指導(dǎo)委員會規(guī)劃教材、普通高等教育電子信息類專業(yè)系列教材——《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL庫》重磅
    的頭像 發(fā)表于 04-03 14:54 ?756次閱讀
    <b class='flag-5'>STM32</b>開發(fā)入門進(jìn)階必備!《<b class='flag-5'>STM32</b>嵌入式系統(tǒng)開發(fā)—基于<b class='flag-5'>STM32CubeMX</b>和HAL庫》新書發(fā)布!

    使用STM32H7的FDCAN通訊,為什么CAN1會收到CAN2的幀ID,CAN2也會收到CAN1的?

    使用STM32H7的FDCAN通訊,請問為什么CAN1會收到CAN2的幀ID,CAN2也會收到CAN
    發(fā)表于 03-14 10:33

    請問STM32cubeMX中文版怎么設(shè)置?

    STM32cubeMX中文版怎么設(shè)置?
    發(fā)表于 03-13 06:12

    STM32CubeMX用于STM32配置和初始化C代碼生成

    電子發(fā)燒友網(wǎng)站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費(fèi)下載
    發(fā)表于 02-26 17:32 ?677次下載

    工程師開發(fā)利器:STM32CubeMX 與 eDesignSuite 的協(xié)同開發(fā)

    HAL 庫實(shí)現(xiàn)高效控制。示例:通過 CubeMX 配置 PWM 輸出和 ADC 采樣,配合 eDesignSuite 的電機(jī)驅(qū)動算法,快速實(shí)現(xiàn)電機(jī)調(diào)速功能。系統(tǒng)級驗(yàn)證與優(yōu)化利用 STM32C
    的頭像 發(fā)表于 02-26 14:07 ?752次閱讀
    工程師開發(fā)利器:<b class='flag-5'>STM32CubeMX</b> 與 eDesignSuite 的協(xié)同開發(fā)

    使用stm32cubeMX無法生成mdk工程文件?

    幾年前使用過cubemx,可以生成keil的工程文件。最近有個工程使用cubemx創(chuàng)建,結(jié)果只能生成stm32cubemx類型的文件,無法生成mdk的工程文件。 請教如何解決。 (我之前使用過多次
    發(fā)表于 01-04 20:03

    STM32CubeMX生成的代碼,是怎樣的HAL架構(gòu)?

    需要注意,CubeMX只是一個初始化工具,它只是幫你完成了HAL庫外設(shè)和時鐘的初始化,具體程序的編寫還需要查閱HAL庫的說明,使用相關(guān)函數(shù)實(shí)現(xiàn)你想實(shí)現(xiàn)的功能。CubeMX生成的代碼包含
    的頭像 發(fā)表于 01-01 21:01 ?829次閱讀
    <b class='flag-5'>STM32CubeMX</b>生成的代碼,是怎樣的HAL架構(gòu)?

    STM32CubeMX的菜單介紹

    相信初學(xué)者打開STM32CubeMX一定是一臉懵逼,里面都是全英文的,不知道從何入手。這里先給大家簡單講解一下。在新建工程這一欄里,我們最常用的是第一個,它會彈出一個芯片列表供你選擇,然后就會創(chuàng)建一
    的頭像 發(fā)表于 12-25 21:03 ?489次閱讀
    <b class='flag-5'>STM32CubeMX</b>的菜單介紹

    何用 S7-200 實(shí)現(xiàn) Modbus 通信?

    電子發(fā)燒友網(wǎng)站提供《如何用 S7-200 實(shí)現(xiàn) Modbus 通信?.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 10:22 ?2次下載

    STM32F4 HAL庫下CAN發(fā)送導(dǎo)致FLASH報錯怎么解決?

    [td]芯片型號為:STM32F407VET6。使用CubeMX配置并生成HAL庫。 在工程中,配置了CAN1和CAN2。并且調(diào)用了函數(shù)HAL_CA
    發(fā)表于 09-09 08:27

    stm32用串口燒錄怎么設(shè)置

    準(zhǔn)備工作 確保您擁有STM32開發(fā)板和相應(yīng)的硬件設(shè)備,如USB轉(zhuǎn)串口模塊。 安裝STM32CubeMXSTM32CubeProgrammer軟件,這些是ST官方提供的工具,用于配置和燒錄ST
    的頭像 發(fā)表于 08-22 09:33 ?3513次閱讀