GD32F303之CAN通信

1、CAN時鐘

GD32F303主時鐘頻率最大是120Mhz,然后APB1時鐘最大是60Mhz,APB2時鐘最大是120Mhz,CAN掛載在APB1總線上面

所以一般CAN的時鐘頻率是60Mhz,這個頻率和后面配置波特率有關

2、GD32F303時鐘配置

首先我們知道芯片有幾個時鐘

HXTAL:高速外部時鐘;
LXTAL:低速外部時鐘;
IRC8M:高速內部時鐘;
IRC40K:低速內部時鐘;

代碼配置時鐘時我們要確定時選擇內部晶振還是外部晶振,他們配置頻率都不一樣,例如下面的宏定義可以配置不同的時鐘頻率

比如? 如果定義了__SYSTEM_CLOCK_120M_PLL_IRC8M宏定義,那么芯片時鐘采用內部晶振8Mhz,然后主時鐘頻率是120Mhz

如果定義了__SYSTEM_CLOCK_120M_PLL_HXTAL宏定義,那么芯片時鐘采用外部晶振時鐘,這個晶振一般都是8Mhz,但是針對不同的系列有所不一樣,比如GD32F303RET6的外部晶振就是12Mhz,然后使能__SYSTEM_CLOCK_120M_PLL_HXTAL宏定義之后他的主時鐘頻率不是120Mhz,看代碼可知? ?(12/2)*30不等于120Mhz,所以時鐘的頻率需要確定好,下面這個代碼只適配外部晶振是8Mhz的。

3、CAN的波特率配置

首先我們需要知道波特率的計算公式,其中的PCLK就是CAN掛載總線APB1的時鐘,一般為60Mhz,如果我們配置為下面的參數,及代表著CAN的波特率為250kbits。

  /* baudrate 250Kbps */can_parameter.resync_jump_width=CAN_BT_SJW_1TQ;can_parameter.time_segment_1 = CAN_BT_BS1_14TQ;can_parameter.time_segment_2 = CAN_BT_BS2_1TQ;can_parameter.prescaler = 15;

4、CAN通信代碼

can.c

//can.c文件
#include "can.h"
#include "led.h"void gd32_can_init(void)
{can_parameter_struct	can_parameter;can_filter_parameter_struct can_filter;/* initialize CAN register */can_deinit(CAN0);/* enable CAN clock */rcu_periph_clock_enable(RCU_CAN0);rcu_periph_clock_enable(RCU_GPIOA);//使能時鐘gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ,GPIO_PIN_11);gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_12);//IO復用為CAN功能/* configure CAN0 NVIC */nvic_irq_enable(CAN0_RX1_IRQn,0,0); //中斷配置can_struct_para_init(CAN_INIT_STRUCT, &can_parameter);can_struct_para_init(CAN_FILTER_STRUCT, &can_filter);//初始化參數/* baudrate 250Kbps */can_parameter.time_segment_1 = CAN_BT_BS1_14TQ;can_parameter.time_segment_2 = CAN_BT_BS2_1TQ;can_parameter.prescaler = 15;/* initialize CAN */can_init(CAN0, &can_parameter);can_filter.filter_fifo_number = CAN_FIFO1;can_filter.filter_enable = ENABLE;can_filter_init(&can_filter);/* enable can receive FIFO0 not empty interrupt */can_interrupt_enable(CAN0, CAN_INT_RFNE1|CAN_INT_TME);}/*CAN通信數據發送can_frame---要發送的數據發送成功返回0,失敗返回1 
*/
uint8_t gd32_can_send(can_trasnmit_message_struct can_frame)
{  uint8_t ret=0;ret = can_message_transmit(CAN0,&can_frame);if(ret == CAN_NOMAILBOX){return 1;}return 0;
}/*CAN出錯--重啟CAN
*/
void gd32_can_error(void)
{if(	can_flag_get(CAN0, CAN_FLAG_MTE2) != RESET ||can_flag_get(CAN0, CAN_FLAG_MTE0) != RESET ||can_flag_get(CAN0, CAN_FLAG_MTE1) != RESET || can_flag_get(CAN0, CAN_FLAG_PERR) != RESET ||can_flag_get(CAN0, CAN_FLAG_WERR) != RESET){can_flag_clear(CAN0, CAN_FLAG_MTE0);can_flag_clear(CAN0, CAN_FLAG_MTE1);can_flag_clear(CAN0, CAN_FLAG_MTE2);can_flag_clear(CAN0, CAN_FLAG_PERR);can_flag_clear(CAN0, CAN_FLAG_WERR);can_wakeup(CAN0);gd32_can_init();}
}/*CAN接收中斷函數
*/
void CAN0_RX1_IRQHandler(void)
{can_receive_message_struct can_mes;memset(&can_mes,0,sizeof(can_mes)); can_message_receive(CAN0, CAN_FIFO1, &can_mes); LED1_ON();
}

can.h

#ifndef __CAN_H
#define __CAN_H#include "gd32f30x.h"
#include "string.h"void gd32_can_init(void);
uint8_t gd32_can_send(can_trasnmit_message_struct can_frame);
void gd32_can_error(void);#endif

main.c

	//CAN初始化gd32_can_init();transmit_message.tx_sfid = 0x7ab;transmit_message.tx_efid = 0x00;transmit_message.tx_ft = CAN_FT_DATA;//幀的類型:數據幀或者遙控幀transmit_message.tx_ff = CAN_FF_STANDARD;//幀的格式:標準幀或者拓展幀transmit_message.tx_dlen = 8;//數據長度小于8transmit_message.tx_data[0] = 0x55;transmit_message.tx_data[1] = 0x55;transmit_message.tx_data[2] = 0x55;transmit_message.tx_data[3] = 0x55;transmit_message.tx_data[4] = 0x55;transmit_message.tx_data[5] = 0x55;transmit_message.tx_data[6] = 0x55;transmit_message.tx_data[7] = 0x55;gd32_can_send(transmit_message);

5、USBCAN-II+的指示燈含義

如果sys 亮綠燈,則代表驅動安裝成功,如果亮紅燈,則表示驅動安裝失敗

如果CAN0或者CAN1的綠燈常亮,說明開始通信

6、CAN通信失敗原因可能

(1)波特率和上位機沒有一一配對

(2) CAN的時鐘頻率配置問題

(3)CANtest上位機如果一直出現打開設備失敗,則選擇使用ZCanPro上位機

(4)可以使用示波器掛一下單片機的兩個輸出引腳,是否有波形發出,如果有,說明軟件發出了數據,然后掛載另一邊,檢查芯片是否有問題

7、USBCAN-II+驅動下載

驅動下載 (zlg.cn)

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

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

相關文章

用理解與包容對待阿斯伯格綜合征患者

在我們的社會中,存在著這樣一個特殊的群體——阿斯伯格綜合征患者。他們在社交互動、溝通交流和行為模式上有著獨特的表現,需要我們以正確的方式去理解和對待。 我們要認識到阿斯伯格綜合征是一種神經發育障礙,而非個人的選擇或過錯。患者可能…

AI Earth——中國城市綠地對大氣污染干沉降作用估計數據集(DDEP)應用APP

基于數學模型量化植被的干沉降過程,突破傳統站點尺度研究的局限性,結合多源衛星遙感產品形成2000-2020年中國城市綠地對PM2.5和PM10的干沉降量估計柵格數據集,對城市大氣污染防治、綠地區域規劃和城市可持續發展有重要意義. 應用結果 代碼 #導入安裝包 import os import …

本地部署,強大的面部修復與增強網絡CodeFormer

目錄 什么是 CodeFormer? 技術原理 主要功能 應用場景 本地部署 運行結果 結語 Tip: 在圖像處理和計算機視覺領域,面部修復和增強一直是一個備受關注的研究方向。近年來,深度學習技術的飛速發展為這一領域帶來了諸多突破性…

c++:面向對象的繼承特性

什么是繼承 (1)繼承是C源生支持的一種語法特性,是C面向對象的一種表現 (2)繼承特性可以讓派生類“瞬間”擁有基類的所有(當然還得考慮權限)屬性和方法 (3)繼承特性本質上是為了代碼復用 (4)類在C編譯器的內部可以理解為結構體,派…

BJT交流分析+共發射極(CE)放大器+單片機的中斷系統(中斷的產生背景+使用中斷重寫秒表程序+中斷優先級)

2024-7-10,星期三,16:58,天氣:陰,心情:晴。今天終于陰天啦,有點風涼快一點了,不然真要受不了了,然后沒有什么特殊的事情發生,繼續學習啦,加油加油…

yolov5中訓練長條型目標召回率低問題

對于長條目標長寬比比較大的目標,如長1000pix,寬度10pix等在訓練時masic數據增強圖片中會出現有的圖片中標簽遺失問題,將原來標注好的目標,但是在增強圖片中沒有標簽,就會導致召回率低的問題。 在訓練代碼中augmentations.py文件…

MATLAB——運算符

文章目錄 MATLAB——運算符算數運算符矩陣的算數運算 關系運算邏輯運算符運算優先級 MATLAB——運算符 算數運算符 MATLAB中算數運算符包括加、減、乘、除、點乘、點除等。其運算規則如下表所示: 運算符運算規則ABA與B相加(A、B為數值或矩陣&#xff0…

一鍵安裝ros及出現問題的解決方案

wget http://fishros.com/install -O fishros && . fishroscatkin_make時出現報錯如下 catkin_make時出現錯誤提示如下: catkin_make Base path: /home/efsz/zmq_to_ros Source space: /home/efsz/zmq_to_ros/src Build space: /home/efsz/zmq_to_ros/build…

科普文:HTTPS協議

概敘 HTTPS(Secure Hypertext Transfer Protocol)即安全超文本傳輸協議,是一個安全通信通道。用于計算機網絡的安全通信,已經在互聯網得到廣泛應用。 HTTPS 是基于 HTTP 的擴展,其相當于 HTTP協議SSL(安全套…

0708,LINUX目錄相關操作

主要是冷氣太足感冒了&#xff0c;加上少吃藥抗藥性差&#xff0c;全天昏迷&#xff0c;學傻了學傻了 cat t_chdir.c #include <stdio.h> #include <unistd.h> #include <error.h> #include <errno.h> #include <sys/stat.h>int main(int argc…

魯棒控制器設計方法:systune,hinfsyn,musyn,slTuner

systune和hinfsyn更側重于基于數學模型的控制器設計&#xff0c;而musyn則特別考慮了系統的不確定性。slTuner則提供了在Simulink環境中進行控制器設計和調整的能力。 指定結構的控制器整定&#xff1a;systune, hinfstruct廣義控制對象整定&#xff1a;musyn, mixed musyn, h…

應急響應-ELK日志分析系統

&#x1f3bc;個人主頁&#xff1a;金灰 &#x1f60e;作者簡介:一名簡單的大一學生;易編橙終身成長社群的嘉賓.? 專注網絡空間安全服務,期待與您的交流分享~ 感謝您的點贊、關注、評論、收藏、是對我最大的認可和支持&#xff01;?? &#x1f34a;易編橙終身成長社群&#…

2024年PMP考試備考經驗分享

PMP是項目管理領域最重要的認證之一,本身是IT行業比較流行的證書&#xff0c;近幾年在臨床試驗領域也漸漸流行起來&#xff0c;是我周圍臨床項PM幾乎人手一個的證書。 考試時間&#xff1a;PMP認證考試形式為180道選擇題&#xff0c;考試時間為3小時50分。 考試計劃&#xff…

NFS綜合項目

現有主機 node01 和 node02&#xff0c;完成如下需求&#xff1a; 1、在 node01 主機上提供 DNS 和 WEB 服務 2、dns 服務提供本實驗所有主機名解析 3、web服務提供 www.rhce.com 虛擬主機 4、該虛擬主機的documentroot目錄在 /nfs/rhce 目錄 5、該目錄由 node02 主機提供的NFS…

Spring——自動裝配Bean

自動裝配是Spring滿足bean依賴的一種方式 Spring會在上下文中自動尋找&#xff0c;并自動給bean裝配屬性 在Spring中有三種裝配的方式&#xff1a; 1. 在xml中顯示配置 2. 在java中顯示配置 3. 隱式的自動裝配bean【重要】 測試 記得創建Cat、Dog、People類 public clas…

NI 5G大規模MIMO測試臺:將理論變為現實

目錄 概覽引言MIMO原型驗證系統MIMO原型驗證系統硬件LabVIEW通信系統設計套件&#xff08;簡稱LabVIEW Communications&#xff09;CPU開發代碼FPGA代碼開發硬件和軟件緊密集成 LabVIEW Communications MIMO應用框架MIMO應用框架特性單用戶MIMO和多用戶MIMO基站和移動站天線數量…

常用控件(三)

輸入類控件 QLineEditQTextEditQComboBoxQSpinBoxQDateTimeEditQDialQSlider QLineEdit QLineEdit用來表示單行輸入框&#xff0c;可以輸入一段文本&#xff0c;但是不能換行; 核心屬性: 屬性說明text輸入框中的文本inputMask輸入內容格式約束maxLength最大長度frame是否添加邊…

推薦算法有哪些?——協同過濾、內容推薦、DNN、FM、DeepFM

推薦算法是機器學習和數據挖掘領域的一個重要研究方向&#xff0c;旨在向用戶或群體推薦可能感興趣的物品或信息。 以下是對您提到的幾種推薦算法的詳細介紹&#xff1a; 1. 協同過濾&#xff08;Collaborative Filtering&#xff09; 定義&#xff1a;協同過濾是一種基于用…

FOLANNIC FD31 UPS工作原理介紹

1&#xff0e;1簡介 FOLANNIC FD31系列UPS系工業級電廠型不間斷電源&#xff0c;是為重要負載提供不受電網干擾、穩壓、穩頻的電力供應的電源設備&#xff0c;在市電掉電后&#xff0c;UPS可給負載繼續提供一段時間供電&#xff0c;此系列UPS采用帶輸出隔離變壓器的高頻雙變換結…

鏈表---頭插法+尾插法

本博客介紹了單鏈表的實現&#xff0c;以及頭插法尾插法的代碼實現 1.定義一個結點類 class ListNode{int value;ListNode next;public ListNode(int value) {super();this.value value;}Overridepublic String toString() {return "ListNode{" "value" …