CAN實驗

CAN 寄存器

HAL庫函數

代碼

#include "./BSP/CAN/can.h"CAN_HandleTypeDef g_can1_handle;
CAN_TxHeaderTypeDef g_can1_txheader;
CAN_RxHeaderTypeDef g_can1_rxheader;/* STM32F103 TS1 = 8 TS2 = 7 BRP = 3 波特率:36000 / [(9 + 8 + 1) * 4] = 500Kbps */
void can_init(void)
{g_can1_handle.Instance = CAN1;g_can1_handle.Init.Mode = CAN_MODE_LOOPBACK;/* 工作模式設置 環回模式:自發自收 *//* 波特率相關 */g_can1_handle.Init.Prescaler = 3 + 1;/* 分頻系數 */g_can1_handle.Init.TimeSeg1 = CAN_BS1_9TQ;/* 時間段1 */g_can1_handle.Init.TimeSeg2 = CAN_BS2_8TQ;/* 時間段2 */g_can1_handle.Init.SyncJumpWidth = CAN_SJW_1TQ;/* 重新同步跳躍寬度 *//* CAN功能設置 */g_can1_handle.Init.AutoBusOff = DISABLE;/* 禁止自動離線管理 */g_can1_handle.Init.AutoRetransmission = DISABLE;/* 禁止自動重發 */g_can1_handle.Init.AutoWakeUp = DISABLE;/* 禁止自動喚醒 */g_can1_handle.Init.ReceiveFifoLocked = DISABLE;/* 禁止接收FIFO鎖定 */g_can1_handle.Init.TimeTriggeredMode = DISABLE;/* 禁止時間觸發通信模式 */g_can1_handle.Init.TransmitFifoPriority = DISABLE;/* 禁止發送FIFO優先級 */HAL_CAN_Init(&g_can1_handle);CAN_FilterTypeDef can_filterconfig = {0};/* 過濾器接收所有報文 不篩選 */can_filterconfig.FilterMode = CAN_FILTERMODE_IDMASK;can_filterconfig.FilterScale = CAN_FILTERSCALE_32BIT;can_filterconfig.FilterIdHigh = 0;can_filterconfig.FilterIdLow = 0;can_filterconfig.FilterMaskIdHigh = 0;can_filterconfig.FilterMaskIdLow = 0;can_filterconfig.FilterActivation = CAN_FILTER_ENABLE;can_filterconfig.FilterBank = 0;can_filterconfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;can_filterconfig.SlaveStartFilterBank = 14;HAL_CAN_ConfigFilter(&g_can1_handle, &can_filterconfig);HAL_CAN_Start(&g_can1_handle);
}void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan)
{GPIO_InitTypeDef gpio_init_struct = {0};__HAL_RCC_CAN1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();gpio_init_struct.Pin = GPIO_PIN_11;gpio_init_struct.Mode = GPIO_MODE_AF_INPUT;/* 復用輸入 */gpio_init_struct.Pull = GPIO_PULLUP;gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &gpio_init_struct);gpio_init_struct.Pin = GPIO_PIN_12;gpio_init_struct.Mode = GPIO_MODE_AF_PP;/* 復用推挽輸出 */HAL_GPIO_Init(GPIOA, &gpio_init_struct);
}/* 發送消息數據函數 */
void can_send_message(uint32_t id, uint8_t *buf, uint8_t len)
{uint32_t tx_mail = CAN_TX_MAILBOX0;g_can1_txheader.ExtId = id;g_can1_txheader.DLC = len;g_can1_txheader.IDE = CAN_ID_EXT;g_can1_txheader.RTR = CAN_RTR_DATA;HAL_CAN_AddTxMessage(&g_can1_handle, &g_can1_txheader, buf, &tx_mail);while(HAL_CAN_GetTxMailboxesFreeLevel(&g_can1_handle) != 3);
}/* 接收數據函數 */
uint8_t can_receive_message(uint8_t *buf)
{if(HAL_CAN_GetRxFifoFillLevel(&g_can1_handle, CAN_RX_FIFO0) == 0){return 0;}HAL_CAN_GetRxMessage(&g_can1_handle, CAN_RX_FIFO0, &g_can1_rxheader, buf);return g_can1_rxheader.DLC;
}
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/KEY/key.h"
#include "./BSP/CAN/can.h"int main(void)
{uint8_t canbuf[8];uint8_t t = 0;uint8_t cnt = 0;uint8_t key = 0;uint8_t i = 0;uint8_t rec_len = 0;uint8_t rec_buf[8];uint8_t x = 0;HAL_Init();                         /* 初始化 HAL 庫 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */delay_init(72);                     /* 延時初始化 */usart_init(115200);                 /* 傳口初始化 */led_init();                         /* LED初始化 */lcd_init();                         /* LCD初始化 */key_init();                         /* KEY初始化 */can_init();                         /* CAN初始化 */lcd_show_string(30, 50, 200, 16, 16, "STM32", RED);lcd_show_string(30, 70, 200, 16, 16, "CAN TEST", RED);lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);lcd_show_string(30, 110, 200, 16, 16, "LoopBack Mode", RED);lcd_show_string(30, 130, 200, 16, 16, "KEY0:Send", RED); /* 顯示提示信息 */lcd_show_string(30, 150, 200, 16, 16, "Count:", RED);        /* 顯示當前計數值 */lcd_show_string(30, 170, 200, 16, 16, "Send Data:", RED);    /* 提示發送的數據 */lcd_show_string(30, 230, 200, 16, 16, "Receive Data:", RED); /* 提示接收到的數據 */while(1){key = key_scan(0);if(key == KEY0_PRES)/* KEY0按下一次,發送一次數據 */{for(i = 0; i < 8; i++){canbuf[i] = i + cnt;/* 填充發送緩沖區 */if (i < 4){lcd_show_xnum(30 + i * 32, 190, canbuf[i], 3, 16, 0X80, BLUE); /* 顯示數據 */}else{lcd_show_xnum(30 + (i - 4) * 32, 210, canbuf[i], 3, 16, 0X80, BLUE); /* 顯示數據 */}}can_send_message(0x12345678, canbuf, 8);/* ID = 0X12345678, 發送8個字節 */}rec_len = can_receive_message(rec_buf);/* 接收數據查詢 */if(rec_len)/* 接收到有數據 */{for(x = 0; x < rec_len; x++){if (x < 4){lcd_show_xnum(30 + x * 32, 250, canbuf[x], 3, 16, 0X80, BLUE); /* 顯示數據 */}else{lcd_show_xnum(30 + (x - 4) * 32, 270, canbuf[x], 3, 16, 0X80, BLUE); /* 顯示數據 */}}}t++;if(t == 20){t = 0;LED1_TOGGLE();/* 提示系統正在運行 */cnt++;lcd_show_xnum(30 + 48, 150, cnt, 3, 16, 0X80, BLUE); /* 顯示數據 */}delay_ms(10);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167582.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167582.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167582.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt學習(2)

1.QObject 只有繼承了QObject類的類&#xff0c;才具有信號槽的能力。所以&#xff0c;為了使用信號槽&#xff0c;必須繼承QObject。凡是QObject類&#xff08;不管是直接子類還是間接子類&#xff09;&#xff0c;都應該在第一行代碼寫上Q_OBJECT。不管是不是使用信號槽&…

【Java 進階篇】Jedis 操作 String:Redis中的基礎數據類型

在Redis中&#xff0c;String是最基礎的數據類型之一&#xff0c;而Jedis作為Java開發者與Redis交互的利器&#xff0c;提供了豐富的API來操作String。本文將深入介紹Jedis如何操作Redis中的String類型數據&#xff0c;通過生動的代碼示例和詳細的解釋&#xff0c;讓你輕松掌握…

C# 中using關鍵字的使用

在C#中我們還是很有必要掌握using關鍵字的。 比如這樣&#xff1a; string path “D:\data.txt”; if (!File.Exists(path )) {File.Create(path); File.WriteAllText(path,"OK"); } 首先我創建…

正則表達式(Java)(韓順平筆記)

正則表達式&#xff08;Java&#xff09; 底層實現 package com.hspedu.RegExp;import java.util.regex.Matcher; import java.util.regex.Pattern;public class RegExp00 {public static void main(String[] args) {String content "1998年12月8日&#xff0c;第二代J…

【Promise】某個異步方法執行結束后 在執行下面方法

使用Promise &#xff0c;當 layer.msg(查詢成功) 這個方法執行結束后 &#xff0c;下面代碼才會執行 let thas this async function showMessage() {await new Promise(resolve > layer.msg(查詢成功, resolve));// 這里的代碼將在 layer.msg 執行結束后執行thas.isGuaran…

數字圖像處理(實踐篇)一 將圖像中的指定目標用bBox框起來吧!

目錄 一 實現方法 二 涉及的OpenCV函數 三 代碼 四 效果圖 一 實現方法 ①利用OTSU方法將前景與背景分割。 ②使用連通區域分析可以將具有相同像素值且位置相鄰的前景像素點組成的圖像區域識別。 ③畫bbox。 ④顯示結果。 二 涉及的OpenCV函數 ① OpenCV提供了cv2.th…

如何安裝和配置代理服務器squid?

安裝和配置Squid代理服務器通常需要幾個步驟。以下是在Ubuntu上安裝和配置Squid的簡單步驟&#xff1a; 步驟 1: 安裝Squid 打開終端&#xff0c;并使用以下命令安裝Squid&#xff1a; sudo apt update sudo apt install squid步驟 2: 配置Squid 默認配置文件位于 /etc/squ…

convertRect:toView 方法注意事項

這是在網上找到的一張圖 我們開發中有時候會用到左邊轉換&#xff0c;convertRect:toView 通常情況下&#xff0c;我們回這樣使用 CGRect newRect [a convertRect:originframe toView:c];其中newRect和 originframe的size相同&#xff0c;只改變origin newRect.origin a…

系統優化軟件Bitsum Process Lasso Pro v12.4,供大家學習研究參考

1、自動或手動調整進程優先級;將不需要抑制的進程添加到排除列表; 2、設置動態提升前臺運行的進程/線程的優先級 3、設置進程黑名單,禁止無用進程(機制為啟動即結束,而非攔截其啟動)。 4、優化I/O優先級以及電源模式自動化。 5、ProBalance功能。翻譯成中文是“進程平衡…

STM32入門--CAN

目錄 一、bxCan簡介 二、bxCAN總體描述 2.1概述 2.2CAN框圖 三、bxCA的工作模式 3.1初始化模式 3.2正常模式 3.3睡眠模式&#xff08;低功耗&#xff09; 四、測試模式 4.1靜默模式 4.2環回模式 五、bxCAN功能描述 5.1 發送處理 ?編輯 5.2接收管理 5.2.1 標識符過…

HTTP協議抓包工具Charles 抓包圖文完整教程

Charles是在您自己的計算機上運行的Web代理&#xff08;HTTP代理 / HTTP監視器&#xff09;&#xff0c;您的網絡瀏覽器&#xff08;或任何其他Internet應用程序&#xff09;配置為通過Charles訪問Internet&#xff0c;Charles可以為您記錄并顯示發送和接收的所有數據。 Http抓…

[tsai.shen@mailfence.com].faust勒索病毒數據怎么處理|數據解密恢復

導言&#xff1a; [support2022cock.li].faust、[tsai.shenmailfence.com].faust、[Encrypteddmailfence.com].faust勒索病毒是一種具有惡意目的的勒索軟件&#xff0c;其主要特點包括對受害者文件進行強力加密&#xff0c;然后勒索受害者支付贖金以獲取解密密鑰。攻擊者通常通…

Centos8部署MySQL主從復制報錯問題

問題1.在部署MySQL主從復制時&#xff0c;創建用戶提示ERROR 1819&#xff1a;Your password does not satisfy the current policy requirements。即為當前配置的密碼&#xff0c;不符合策略要求。 問題1解決方式&#xff1a; set global validate_password.policyLOW; \\…

Leetcode—1410.HTML實體解析器【中等】

2023每日刷題&#xff08;三十八&#xff09; Leetcode—1410.HTML實體解析器 算法思想 實現代碼 typedef struct entityChar {char* entity;char rechar; }entity;entity matches[] {{"&quot;", "},{"&apos;", \},{"&amp;"…

NLP中 大語言模型LLM中的思維鏈 Chain-of-Thought(CoT) GoT

文章目錄 介紹思路CoT方法Few-shot CoTCoT Prompt設計CoT投票式CoT-自洽性&#xff08;Self-consistency&#xff09;使用復雜的CoT自動構建CoTCoT中示例順序的影響Zero-shot CoT 零樣本思維鏈 GoT,Graph of Thoughts總結 介紹 在過去幾年的探索中&#xff0c;業界發現了一個現…

C語言之strstr函數的使用和模擬實現

C語言之strstr函數的模擬實現 文章目錄 C語言之strstr函數的模擬實現1. strstr函數的介紹2. strstr函數的使用3. strstr的模擬實現3.1 實現思路3.2 實現代碼 1. strstr函數的介紹 函數聲明如下&#xff1a; char * strstr ( const char * str1, const char * str2 ); strs…

怎樣自動把網頁截圖發到微信群里

現在很多公司都在使用企業微信了&#xff0c;不但方便公司內部交流和客戶交流&#xff0c;還能組建各種小組群&#xff0c;業務群。企業微信群提供一個機器人的功能&#xff0c;方便我們把公司業務信息&#xff0c;或來自外部的信息自動發布到群里。 這里研究一下如何向微信群…

大數據-之LibrA數據庫系統告警處理(ALM-37003 GTM主備不同步或者GTM主備斷連)

告警解釋 當GTM主實例與GTM備實例連接異常或者GTM主實例未處于同步狀態時&#xff0c;產生該告警。 告警屬性 告警ID 告警級別 可自動清除 37003 嚴重 是 告警參數 參數名稱 參數含義 ServiceName 產生告警的服務名稱 RoleName 產生告警的角色名稱 HostName 產…

基于OpenCV+MediaPipe的手勢識別

【精選】【優秀課設】基于OpenCVMediaPipe的手勢識別&#xff08;數字、石頭剪刀布等手勢識別&#xff09;_石頭剪刀布opencv識別代碼_網易獨家音樂人Mike Zhou的博客-CSDN博客 import cv2 import mediapipe as mp import mathdef vector_2d_angle(v1, v2):求解二維向量的角度v…

HIVE SQL 判斷空值函數

目錄 nvl()coalesce() nvl() select nvl(null,2);輸出&#xff1a;2 select nvl(,2);輸出&#xff1a;‘’ coalesce() select coalesce(null,2);輸出&#xff1a;2 select coalesce(,2);輸出&#xff1a;‘’ select coalesce(null,null,2);輸出&#xff1a;2 *coalesc…