STM32F042 CAN使用例子

2021-09-27 10:03:55 字數 1190 閱讀 9596

**如下:

#include "mycan.h"

//can初始化

//tsjw:重新同步跳躍時間單元.範圍:1~3; can_sjw_1tq can_sjw_2tq can_sjw_3tq can_sjw_4tq

//tbs2:時間段2的時間單元.範圍:1~8;

//tbs1:時間段1的時間單元.範圍:1~16; can_bs1_1tq ~can_bs1_16tq

//brp :波特率分頻器.範圍:1~1024;(實際要加1,也就是1~1024) tq=(brp)*tpclk1

//注意以上引數任何乙個都不能設為0,否則會亂.

//波特率=fpclk1/((tsjw+tbs1+tbs2)*brp);

//mode:0,普通模式;1,回環模式;

//fpclk1的時鐘在初始化的時候設定為36m,如果設定can_normal_init(1,8,7,5,1);

//則波特率為:48m/((1+8+7)*5)=450kbps

void can_mode_init(uint8_t tsjw,uint8_t tbs2,uint8_t tbs1,uint16_t brp,uint8_t mode)

#if can_rx0_int_enable //使能rx0中斷

//中斷服務函式

void cec_can_irqhandler(void)

#endif

//can傳送一組資料(固定格式:id為0x12,標準幀,資料幀)

//len:資料長度(最大為8)

//msg:資料指標,最大為8個位元組.

//返回值:0,成功;

// 其他,失敗;

uint8_t can_send_msg(uint8_t* msg,uint8_t len)

//can口接收資料查詢

//buf:資料快取區;

//返回值:0,無資料被收到;

// 其他,接收的資料長度;

uint8_t can_receive_msg(uint8_t *buf)

注意:一定要根據自己的封裝來設定

syscfg->cfgr1 |= syscfg_cfgr1_pa11_pa12_rmp;

如果不設定 can_init(can, &can_initstructure);會初始化失敗

stm32f042除錯Can心得

這兩天玩了一下stm32f042的can,但是折騰了2個晚上,還是沒有進展。我知道stm32f042f6p6 ssop20封裝的pin17,pin18預設是pa9,pa10的功能,如果想使用pa11和pa12,需要進行埠對映。這樣的話,我直接就用了下面的 進行埠對映,syscfg memoryrem...

STM32F1與STM32F4間CAN通訊除錯

can通訊的除錯不單是軟體上的除錯,也需要對硬體進行檢查。在調通之前一直有兩個疑惑干擾判斷 結論在文末 1.不同的can晶元是否存在不相容。2.不同型號的stm32是否can通訊是否存在差異。stm32f1與stm32f4之間can通訊的除錯過程 僅以stm32f1作介紹 標準庫 1.確定引腳與資源...

STM32F1使用CAN無法接收資料

在使用正點原子戰艦v3進行can實驗時,can在回環模式下測驗結果顯示正常,但是在正常模式下進行兩個開發板通訊時,資料可以正常傳送,卻無法接受資料。static void can gpio config void can在回環模式下可以得到正常資料說明can的初始化正常,那麼問題就可能出現在後來加入...