色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

聚豐項目 > AB32VG1 RT-Thread CAN總線收發(fā)

AB32VG1 RT-Thread CAN總線收發(fā)

本項目在 ab32vg1 開發(fā)板上通過模擬口實現(xiàn)了 spi 協(xié)議并與 mcp2515 芯片通信,完成了收發(fā) can 幀的功能。

march1993 march1993

分享
2 喜歡這個項目
團隊介紹

march1993 march1993

團隊成員

march1993 技術(shù)負責(zé)人

分享
項目簡介
本項目在 ab32vg1 開發(fā)板上通過模擬口實現(xiàn)了 spi 協(xié)議并與 mcp2515 芯片通信,完成了收發(fā) can 幀的功能。
硬件說明

使用到的硬件如下:


1. AB32VG1 本尊
本來是想用自帶的 SPI 收發(fā)器的,奈何沒有文檔,不過學(xué)會了大家的套路,用 GPIO 直接實現(xiàn)了 SPI 協(xié)議,肝就完事兒了!


2. MCP2515
MCP2515 我用的很多,不過都是在 arm linux 平臺上的,直接加載驅(qū)動用 SocketCAN 的,這次在嵌入式平臺上沒有現(xiàn)成的驅(qū)動了,照著大家的代碼寫,肝就完事兒了!


3. 一汽流出的ARS410OD雷達
從自己的庫存里掏出了一個雷達,沒想到還是 OEM 品,沒有 datasheet,本來是想讀取數(shù)據(jù)做個上位機可視化一下的,可惜沒有格式文檔,肝不動了!

軟件說明

開發(fā)環(huán)境:

- RT-Thread 版本 latest- RT

- Thread Studio版本  V2.1.2

- AB32VG1 開發(fā)板 BSP 版本 V2.0


Gitee 項目地址:https://gitee.com/march1993/ab32vg1-rt-thread-mcp2515

我平時是個前端工程師,偶爾寫寫 GO 語言后端的,有關(guān)嵌入式的知識都還停留在學(xué)校里,不過這次非常出乎意料,RT-Thread 代碼非常好上手,AB32VG1 的開發(fā)調(diào)試也絕頂方便。寫好代碼,編譯,downloader 直接刷固件然后可以直接讀寫串口,可能是我見識短淺,不過當我第一次看到 downloader 刷完直接有一個 shell 可以用而且代碼里可以用 rt_kprintf 的時候我是驚呆了的,時代真的變了,嵌入式開發(fā)原來可以這么容易。


下面一段是設(shè)置 SPI 的代碼


#define __AB32_PORT(port)   GPIO##port
#define __AB32_GET_PIN_A(PIN)  PIN
#define __AB32_GET_PIN_B(PIN)  8 + PIN
#define __AB32_GET_PIN_E(PIN)  13 + PIN
#define __AB32_GET_PIN_F(PIN)  21 + PIN

// PB2 10
// PE5 18
// PE6 19
// PB1 9
#define SOFT_SPI1_BUS_CONFIG { \
    .mosi_pin = 18, \
    .miso_pin = 10, \
    .sclk_pin = 9, \
    .bus_name = "spi0", \
}
// CS Pin  PE6 19
rt_soft_spi_device_attach("spi0", "spi0.0", RT_NULL, 19);


下面一段是初始化 MCP2515 的代碼,挺好用


void mcp2515_initialize(void)
{
    // https://www.cnblogs.com/yikoulinux/p/13706054.html
    mcp2515_reset(); //復(fù)位
    mcp2515_send(0x0f, 0x80); //CANCTRL寄存器--進入配置模式 中文DATASHEET 58頁
    // 可以設(shè)置的波特率 5K 10K 15K 20K 25K 40K 50K 80K 100K 125K 200K 400K 500K 667K 800K 1M
    // 
    https://www.kvaser.com/support/calculators/bit-timing-calculator/
    mcp2515_send(0x2A, 0x00); //CNF1位定時配置寄器   中文DATASHEET 41-42頁
    mcp2515_send(0x29, 0x88); //CNF2位定時配置寄器   中文DATASHEET 41-42頁
    mcp2515_send(0x28, 0x03); //CNF3位定時配置寄器   中文DATASHEET 41-43頁
    mcp2515_send(0x2B, 0x1f);     //CANINTE中斷使能寄存器  中文DATASHEET 50 頁
    mcp2515_send(0x60, 0x60);     //RXB0CTRL接收緩沖器0 控制寄存器 中文DATASHEET 27 頁
    //write_byte_2515(0x70, 0x20);   //接收緩沖器1控制寄存器
    mcp2515_bit_modify(0x0C, 0x0f, 0x0f); //BFPCTRL_RXnBF 引腳控制寄存器和狀態(tài)寄存器 中文DATASHEET 29 頁
    // mcp2515_send(0x0f, 0x40);   //CAN控制寄存器--回環(huán)模式,用于測試
    mcp2515_send(0x0f, 0x00);   //CAN控制寄存器--正常模式
}


下面一段代碼是用于控制 MCP2515 寄存器的,可以看到這里調(diào)用了 RT-Thread 的 SPI 庫函數(shù) rt_spi_transfer_message,抽象的還挺好用的。


void mcp2515_send(unsigned char addr, unsigned char data)
{
    struct rt_spi_message message = { 0 };
    unsigned char buf[3] = { 0x02, addr, data };
    message.send_buf = buf;
    message.length = 3;
    message.cs_take = 1;
    message.cs_release = 1;
    rt_spi_transfer_message(spi, &message);
}


本來還想用 RT-Thread 的 CAN 庫函數(shù)的,不過還要實現(xiàn)完整的協(xié)議棧,肝不動了,連著幾天肝到天亮可不太行。

演示效果

下圖是連接示意圖,左邊是MCP2515模塊,中間是 AB32VG1 本尊,右邊是 ARS410OD

ARS410OD 通過 CAN 總線和 MCP2515 相連,MCP2515 通過 SPI 總線和 AB32VG1 相連


IMG_4860.JPG


下圖顯示了從收發(fā)器里讀取出來的 CAN 幀


IMG_4861.JPG


最后還有一個視頻可以看,可以看到串口刷刷的在翻頁,數(shù)據(jù)刷的賊快,這說明啥,說明 AB32VG1 牛逼!



評論區(qū)(0 )
主站蜘蛛池模板: 久久久久久电影| 亚洲精品AV无码重口另类| 2020国产欧洲精品视频| 久久亚洲这里只有精品18| 中文字幕久久久| 欧美一区二区三区久久综| 成人五级毛片免费播放| 午夜片无码区在线观看| 精子射到丝袜上图| 97在线观看成人免费视频| 三男强一女90分钟在线观看| 好湿好滑好硬好爽好深视频| 91精品国产91热久久p| 乳色吐息在线观看全集免费观看| 国产一区二区三区国产精品| 45分钟做受片免费观看| 摥管专用动态图399期| 久久五月综合婷婷中文云霸高清| JLZZJLZZJLZ老师好多的水| 亚洲AV 无码AV 中文字幕| 毛片免费在线播放| 国产精品视频大全| 91精品婷婷国产综合久久8| 色欲AV久久综合人妻蜜桃| 久久se精品一区二区国产| 超碰免费视频部落格| 一个人免费观看在线视频播放 | 免费精品国偷自产在线在线| 国产成人亚洲综合无| 8050午夜二级一片| 学生精品国产在线视频| 免费视频精品38| 國產日韓亞洲精品AV| oldgrand欧洲老妇人| 一本大道手机在线看| 熟女强奷系列中文字幕| 男人天堂999| 精品无码国产AV一区二区三区| 大乳牛奶女在线观看| 91综合久久久久婷婷| 亚洲日产2020乱码草莓毕|