国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

輸入CPU型號:

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

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

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

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

使能看門狗,

使能CAN

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

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

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

切換到Configuration選項卡,進入CAN配置選項配置波特率如下為500Kbps。

配置接收中斷。

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

配置定時器中斷

配置完成后點擊保存,然后點擊如下按鈕,生成代碼

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

選擇生成代碼的方式

等待……

之后點擊打開項目。代碼生成部分完成。

添加一些特殊配置和邏輯代碼,添加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ù)使能一次只進一次中斷,所以中斷退出前要再次使能。

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-實現(xiàn)CAN通訊

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    何用軟件實現(xiàn)系統(tǒng)的復(fù)位?

    看門狗的工作過程是怎樣的? 如何用軟件實現(xiàn)系統(tǒng)的復(fù)位?
    發(fā)表于 01-08 06:15

    PXB-6020(D):讓CAN通訊更靈活,Modbus接入更簡單

    在現(xiàn)代工業(yè)和儲能系統(tǒng)中,CAN通訊接口數(shù)量有限,常常限制了系統(tǒng)的擴展和設(shè)備接入。如何在不增加成本的情況下,實現(xiàn)更多設(shè)備的靈活接入?本文將介紹一款高效、可靠的解決方案,輕松解決接口瓶頸問題。背景在
    的頭像 發(fā)表于 11-27 11:38 ?302次閱讀
    PXB-6020(D):讓<b class='flag-5'>CAN</b><b class='flag-5'>通訊</b>更靈活,Modbus接入更簡單

    AT32F系列 CAN通訊模式使用

    AT32F系列 CAN通訊模式使用本帖子演示AT32F系列_CAN通訊模式的使用方法。注:本應(yīng)用筆記對應(yīng)的代碼是基于雅特力提供的V2.x.x 板級支持包(BSP)而開發(fā),對于其他版本B
    發(fā)表于 10-20 16:29

    CAN通訊失敗的常見原因

    通過這種由外至內(nèi)、從硬件到軟件的逐層排查,我能夠高效地定位并解決絕大多數(shù)CAN通訊故障。
    的頭像 發(fā)表于 10-14 15:15 ?1498次閱讀

    請問RT-Thread與stm32cubemx聯(lián)合開發(fā)的原理是什么?

    在使用RT-Thread與stm32cubemx聯(lián)合開發(fā)的原理是什么,cubemx在其中主要起到了哪些功能呢?
    發(fā)表于 10-11 15:49

    意法半導(dǎo)體:STM32CubeMX將不再集成到STM32CubeIDE中

    從2025年11月發(fā)布的版本開始,我們將僅以 獨立 版本的形式提供 STM32CubeIDE 和 STM32CubeMX 。 STM32CubeMX將不再集成到STM32CubeIDE
    的頭像 發(fā)表于 09-01 17:18 ?3433次閱讀

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

    在智能物流倉儲系統(tǒng)中,AGV等設(shè)備的通訊網(wǎng)絡(luò)穩(wěn)定性和實時性至關(guān)重要。通過Profinet轉(zhuǎn)CAN網(wǎng)關(guān),可以實現(xiàn)中控系統(tǒng)(如西門子PLC,支持ProFiNet協(xié)議)與伺服驅(qū)動器(支持CAN
    的頭像 發(fā)表于 06-09 14:59 ?909次閱讀
    Profinet轉(zhuǎn)<b class='flag-5'>CAN</b>網(wǎng)關(guān)模塊對<b class='flag-5'>實現(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軟件進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軟件進CAN配置發(fā)現(xiàn)STM32F103TBU6封裝是VFQFPN36PD0和PD1沒有
    發(fā)表于 04-27 08:41

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

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

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

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

    CAN報文流程解析

    CAN報文流程解析,直流充電樁上的CAN通訊解析過程
    發(fā)表于 03-24 14:03 ?10次下載

    使用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生成的FreeRTOS源碼格式如何優(yōu)化?

    如圖,STM32CubeMX生成的FreeRTOS源碼格式有待優(yōu)化,空格都是以箭頭的方式呈現(xiàn),觀感很差。FreeRTOS官方下載的源碼則不存在這個問題,說明是STM32CubeMX生成源碼的過程出現(xiàn)的格式問題,希望ST官方能對此做下優(yōu)化!
    發(fā)表于 03-10 08:04