日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(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兩個(gè)編程軟件,然后打開cubemx軟件,新建一個(gè)工程項(xiàng)目:

輸入CPU型號(hào):

在右下角雙擊CPU具體型號(hào):

稍等片刻會(huì)打開如下對(duì)話框:

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

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

使能看門狗,

使能CAN,

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

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

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

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

配置接收中斷。

配置定時(shí)器如下為1ms定時(shí)器。

配置定時(shí)器中斷

配置完成后點(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í)器啟動(dòng)函數(shù):

HAL_TIM_Base_Start_IT(&htim2);

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

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

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

HAL_CAN_Receive_IT(&hcan, CAN_FIFO0);

注意:接收中斷啟動(dòng)函數(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ù)后,編譯器會(huì)先編譯我們定義的函數(shù),而忽略系統(tǒng)定義的該函數(shù)。當(dāng)我們沒有定義該函數(shù)時(shí),系統(tǒng)會(huì)編譯帶有__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í)器函數(shù)中添加定時(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 */}

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

/* USER CODE BEGIN Includes */

責(zé)任編輯:xj

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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    如何在 STM32Cube CMake 工程中添加源文件

    STM32CubeMX 能夠很方便的導(dǎo)出 CMake 工程。例如,如下圖所示在 STM32CubeMX的 ToolChain/IDE 中選擇 Cmake。CMake 工程可以很容易被
    發(fā)表于 04-15 16:07 ?0次下載

    CAN?轉(zhuǎn) ModbusRTU?網(wǎng)關(guān) 十大通訊故障排查與解決指南

    ? 在工業(yè)自動(dòng)化的多總線互聯(lián)場(chǎng)景中,捷米特 CAN?轉(zhuǎn) ModbusRTU?系列網(wǎng)關(guān)作為 CAN?總線與 ModbusRTU?網(wǎng)絡(luò)互通的核心適配設(shè)備,廣泛應(yīng)用于智能制造、汽車電子、能源監(jiān)測(cè)、水處理
    的頭像 發(fā)表于 04-07 08:37 ?419次閱讀
    <b class='flag-5'>CAN</b>?轉(zhuǎn) ModbusRTU?網(wǎng)關(guān) 十大<b class='flag-5'>通訊</b>故障排查與解決指南

    CAN轉(zhuǎn)ModbusRTU 網(wǎng)關(guān) 十大通訊故障排查手冊(cè)

    在工業(yè)自動(dòng)化的多總線互聯(lián)場(chǎng)景中,捷米特CAN轉(zhuǎn)ModbusRTU系列網(wǎng)關(guān)作為 CAN 總線與 ModbusRTU 網(wǎng)絡(luò)互通的核心適配設(shè)備,廣泛應(yīng)用于智能制造、汽車電子、能源監(jiān)測(cè)、水處理、智能樓宇等
    的頭像 發(fā)表于 03-24 09:40 ?298次閱讀

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

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

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

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

    AT32F系列 CAN通訊模式使用

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

    CAN通訊失敗的常見原因

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

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

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

    cubemx生成的main.c報(bào)錯(cuò)怎么解決?

    "../cubemx/Src/main.c" arm-none-eabi-gcc "../cubemx/Src
    發(fā)表于 09-28 09:00

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

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

    CAN 接口的“老炮”本色:ARMxy BL410 工業(yè)通訊全攻略

    深圳市鋇錸技術(shù)有限公司ARMxy系列BL410控制器,內(nèi)置工業(yè)級(jí)CAN接口,支持多節(jié)點(diǎn)廣播、強(qiáng)抗干擾與高實(shí)時(shí)性,適用于儲(chǔ)能系統(tǒng)BMS、AGV、變頻器組網(wǎng)等復(fù)雜環(huán)境。配合RS485、LAN等多接口組合,實(shí)現(xiàn)設(shè)備到云的穩(wěn)定高速通訊
    的頭像 發(fā)表于 08-12 09:35 ?1005次閱讀

    STM32CubeMX配置STM32G070RBT6TR時(shí)為什么無法使能PVD中斷?

    STM32CubeMX 配置STM32G070RBT6TR時(shí)無法使能PVD中斷
    發(fā)表于 06-18 07:59

    如何解決CAN通訊故障?原因分析與解決方法全攻略

    在日常工作中,我們經(jīng)常收到客戶的反饋,他們表示CAN卡無法正常通訊,這給工作帶來了諸多不便。今天,就讓我們深入探討一下導(dǎo)致CAN通訊失敗的常見原因,以及相應(yīng)的解決方法。單個(gè)
    的頭像 發(fā)表于 06-16 11:39 ?2395次閱讀
    如何解決<b class='flag-5'>CAN</b><b class='flag-5'>通訊</b>故障?原因分析與解決方法全攻略

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

    在智能物流倉(cāng)儲(chǔ)系統(tǒng)中,AGV等設(shè)備的通訊網(wǎng)絡(luò)穩(wěn)定性和實(shí)時(shí)性至關(guān)重要。通過Profinet轉(zhuǎn)CAN網(wǎng)關(guān),可以實(shí)現(xiàn)中控系統(tǒng)(如西門子PLC,支持ProFiNet協(xié)議)與伺服驅(qū)動(dòng)器(支持CAN
    的頭像 發(fā)表于 06-09 14:59 ?1166次閱讀
    Profinet轉(zhuǎn)<b class='flag-5'>CAN</b>網(wǎng)關(guān)模塊對(duì)<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
    施甸县| 大名县| 柳河县| 长乐市| 抚松县| 乌苏市| 宽甸| 延长县| 贵定县| 陆川县| 昌图县| 荣成市| 乌拉特中旗| 武穴市| 咸宁市| 老河口市| 遂昌县| 虎林市| 潼南县| 共和县| 富川| 澄城县| 广元市| 揭阳市| 岐山县| 巴林右旗| 台湾省| 二连浩特市| 广东省| 咸阳市| 屏南县| 南阳市| 开阳县| 图片| 乐至县| 包头市| 广汉市| 东海县| 宁南县| 建德市| 韶关市|