STM32F207下的實驗(1) CAN通訊基礎

2021-08-17 20:16:29 字數 2371 閱讀 7879

can控制器通過兩根線上的電位差來判斷匯流排電平

can.h

#can.h

#include"stm32f2xx.h"

#ifndef __can_h_

#define __can_h_

void can_mode_config(u8 can_bs1_xtq, u8 can_bs2_ytq, u16 prescaler);

u8 can_send_msg(u8 *msg, u8 len);

u8 can_receive_msg(u8 *buf);

#endif

can.c

#include"stm32f2xx.h"

#include"stm32f2xx_can.h"

#include"can.h"

void can_mode_config(u8 can_bs1_xtq, u8 can_bs2_ytq, u16 prescaler)

//開始傳送

u8 can_send_msg(u8 *msg, u8 len) //msg為資料,len為長度

mbox = can_transmit(can1, &txmessage); //返回當前郵箱

while((can_transmitstatus(can1, mbox) == can_txstatus_failed)&&(i < 0xfff))

if(i >= 0xfff)

return 0;

}u8 can_receive_msg(u8 *buf)

can_receive(can1, can_fifo0, &rxmessage); //接收資訊(報文),將can_fifo0中的資料通過can1拷貝到rxmessage結構體中

for(i = 0; i < rxmessage.dlc; i++)

return rxmessage.dlc;

}

led.h

#include"stm32f2xx.h"

#ifndef __led_h

#define __led_h

void led_init(void);

void delay(vu32 ncount);

void ctl_led(u8 led_num, u8 off_on);

#endif

led.c

#include"led.h"

#include"stm32f2xx.h"

void led_init(void)

void delay(vu32 ncount)

#if 1

void ctl_led(u8 led_num, u8 off_on)

else

break;

case 1:

if(off_on == 1)

else

break;

default:

//gpio_resetbits(gpiof,gpio_pin_7|gpio_pin_8|gpio_pin_9|gpio_pin_10);

gpio_setbits(gpiod,gpio_pin_11|gpio_pin_12);

break; }}

#endif

main.c

#include"stm32f2xx.h"

#include"can.h"

#include"led.h"

int main(void)

; //這裡因為不知道從usb_can發的是什麼,只需初始化為0即可

u8 a[8] = ; //這裡的02和2一樣,12是0c

led_init();

delay(168);

can_mode_config(can_bs1_8tq, can_bs2_6tq, 8); //此時can波特率為:30000/(1+8+6)*8 = 250kbps

while(1)

else if(key > 0) //當接收到資料時,開始執行這一步

else

} }//開始的時候,沒有接收到資料,故左邊燈亮,當接收到資料時,開始執行傳送資料函式,若傳送成功,右邊燈亮,

//若資料傳送失敗,熄滅led燈1

//問題:資料傳送成功和失敗的判斷:是否合理?左邊的燈會一直亮

//結合上面程式,將沒有接收到資料時燈滅,資料傳送時燈亮,可知資料傳送成功,

//問題:can程式實驗**不顯示接收?而且和傳送資料框的資料無關?

/* while(1)

else if(key > 0)

}else

}*/ }

STM32F207外部中斷實驗

stm32的每個io口都可以作為外部中斷輸入。gpiox.0對映到exti0,gpiox.1對映到exti1,同乙個時間只能有乙個io口對映到中斷線。對於每乙個中斷線,可以設定相應的觸發方式 上公升沿觸發 下降沿觸發 邊沿觸發 和使能。io外部中斷在中斷向量表中只分配了7個中斷向量,也就是只能使用7...

STM32F207管腳對映配置PWM輸出筆記

已親測,可以實現。第一步 配置相關管腳輸出,比如我的是配置到pb9,使用的是定時器4的第四通道。void pwm gpio config void 第二步 配置定時器。2.配置定時器 首先是像51微控制器一樣需要給出定時器乙個初始值。而stm32的時鐘比51的複雜。我們的stm32的定時器4使用的是...

STM32F207 uCOS II 任務排程的問題

是的,這個問題糾纏了我乙個多月,我都要崩潰了放棄了。今天還是在網際網路上找到了答案,太感謝發帖的人了。抑鬱的情懷終於得到釋放,啦啦啦 平台 stm32f207 ucos ii v2.85 lwip 問題 網口接收到資料來中斷時,通過ossempost告知任務進行處理。只要接網口,有網口資料接收,不管...