0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

树莓派Pico不带CAN接口怎么办?难道要换方案?

上海晶珩电子科技有限公司 2025-03-25 09:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Pico PIO状态机实现外设:CAN - 示例1

Pico拥有一组PIO协处理器。它们是实时控制器,能够以确定的时序执行逻辑。非常适合运行严格定时的序列和状态机,以及实现额外的外设(如这里的CAN)。序列和状态机,以及实现额外的外设(如这里的CAN)。

PIO引擎不易编程,也不易学习。但有一些很好的示例可供参考。我正在复习Kevin O'Connor精彩的can2040库。

在这篇文章中:我将创建一个测试平台,并证明我可以接收CAN通信

0d52a186-0919-11f0-9434-92fbcf53809c.jpg

这篇博客的目的不是编写PIO(可编程输入输出)开发者教程。我试图回溯开发者如何使用PIO指令实现一个标准协议。我使用的工具包括C语言、CMake、VSCode和Pico C SDK。预期的技能水平是:你能够构建和运行官方的pico-examples。

在通常情况下(这里跳过OSI模型),CAN(控制器局域网)有两层:

逻辑层:TTL、5V、3.3V等数字信号,由一些智能元件实现,如外设、控制器位操作,本例中为PIO状态机。

总线层:物理层,通常通过驱动器/收发器IC实现。我将在这里使用一个物理驱动器IC,这是我自己设计的一个小东西,我经常使用。你也可以仅使用普通电阻和二极管制作一个简易的CAN驱动器。

作为通信对等体,我使用另外两个具备CAN能力的设备:一个带有CAN外设的衍生设备和一个Microchip CAN总线分析仪。一个带有CAN屏蔽板的Arduino(MKR)同样适用。

这篇文章不深入代码。它只是一个测试平台,让我看看是否能建立一个CAN通信。

获取can2040库

从Kevin的Kevin's github克隆或下载源代码。

设置一个环境变量指向这个位置。这将确保我们可以创建一个不依赖于你存放第三方代码位置的make脚本。我使用的是VSCode,并将在那里定义环境变量。你也可以在你的操作系统设置、shell脚本等中设置。

0da96b56-0919-11f0-9434-92fbcf53809c.jpg

项目文件夹

我创建了一个包含CMake文件和src文件夹的目录,src文件夹包含了一个非常简单的测试文件(从这里获取的,但我在项目中引用了can2040源代码而不是导入它们)。

src/main.c

// source: https://gitea.predevolution-technologies.de/anme/CAN2040_Test
#include #include #include "pico/stdlib.h"#include "pico/binary_info.h"#include "hardware/irq.h"#include "can2040.h"#include "RP2040.h"
static struct can2040 cbus;
static void can2040_cb(struct can2040 *cd, uint32_t notify, struct can2040_msg *msg){ // Add message processing code here...}
static void PIOx_IRQHandler(void){ can2040_pio_irq_handler(&cbus);}
void canbus_setup(void){ uint32_t pio_num = 0; uint32_t sys_clock = 125000000, bitrate = 125000; uint32_t gpio_rx = 14, gpio_tx = 15;
// Setup canbus can2040_setup(&cbus, pio_num); can2040_callback_config(&cbus, can2040_cb);
// Enable irqs irq_set_exclusive_handler(PIO0_IRQ_0_IRQn, PIOx_IRQHandler); NVIC_SetPriority(PIO0_IRQ_0_IRQn, 1); NVIC_EnableIRQ(PIO0_IRQ_0_IRQn);
// Start canbus can2040_start(&cbus, sys_clock, bitrate, gpio_rx, gpio_tx);}
int main(void){
const uint LED_PIN = PICO_DEFAULT_LED_PIN; gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); int32_t ledState = 0; stdio_init_all(); canbus_setup();
while(1){ printf("bla\n"); gpio_put(LED_PIN, ledState); if (ledState == 0){ ledState = 1; } else{ ledState = 0; } sleep_ms(1000); }}

./CMakeList.txt

cmake_minimum_required(VERSION 3.13)
# Pull in SDK (must be before project)include(pico_sdk_import.cmake)
project(can2040_project0 C CXX ASM)set(CMAKE_C_STANDARD 11)set(CMAKE_CXX_STANDARD 17)
#I've set this to allow breakpoints on any source lineset(PICO_DEOPTIMIZED_DEBUG=1)
pico_sdk_init()

add_executable(can2040_project0 source/main.c $ENV{CAN2040_LIB_PATH}/src/can2040.c )
target_include_directories(can2040_project0 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/source $ENV{CAN2040_LIB_PATH}/src )

target_link_libraries(can2040_project0 pico_stdlib cmsis_core)
pico_add_extra_outputs(can2040_project0)

侧边栏:Pico PIO和其他预测性、时间关键型协处理器

Pico PIO状态机是小型协控制器,它们以可预测的速度执行每条指令。这类控制器从不会被中断,不会监听中断(但可以触发中断)。它们只是可靠地时钟同步并执行它们的小程序。通常,它们可以快速访问一些GIO引脚。

还有其他一些控制器和处理器具有类似的功能:TI(德州仪器)的Hercules微控制器具有高端定时器。它与Pico PIO引擎非常相似,但Hercules指令额外支持角度、相位等(这些是用于多相电源电机驱动的功能)。(同样来自TI的)BeagleBone具有PRU(可编程实时单元),这也与Pico PIO引擎的功能非常接近。PRU可以直接访问内存和DMA引擎。这三者共同的特点是,它们不仅能够产生精确定时的信号,还能够采样输入信号。并且它们是超灵活的定时器,可以处理计数、相位移动、正交编码等功能。

测试

我启动了一个调试会话,在can2040_cb()回调函数处设置了断点。然后,从我的另一台设备发送了一条CAN消息:

0dd84714-0919-11f0-9434-92fbcf53809c.jpg

RP2040在断点处停止,我可以看到消息ID、DLC(长度)和有效载荷:

0e01ce7c-0919-11f0-9434-92fbcf53809c.jpg

我附上了我的VSCode项目的ZIP文件。别忘了下载can2040源代码并设置环境变量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    58

    文章

    3013

    浏览量

    471522
  • Pico
    +关注

    关注

    0

    文章

    185

    浏览量

    18352
  • 树莓派
    +关注

    关注

    122

    文章

    2069

    浏览量

    109746
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    树莓pico入门学习笔记(一)相关资料推荐

    树莓pico入门学习笔记选择自己熟悉的编程语言树莓pico提供C/C++和micropyth
    发表于 07-01 09:28

    树莓pico如何入门?

    树莓pico如何入门?
    发表于 10-13 08:11

    树莓Pico的相关资料分享

    关注、星标公众号,直达精彩内容1月22日,树莓基金会最新发布一款低成本、高性能的微控制器开发板Raspberry Pi Pico,新产品相比普通树莓
    发表于 11-03 08:44

    使用树莓Pico开发板的一些思考与应用实践资料分享

    本博文根据树莓基金会2021年1月21日公开的两部最新官方英文技术文献[1]、[2]以及博主最近使用树莓Pico开发板的一些思考与应用实
    发表于 11-12 06:07

    树莓Pico的相关资料推荐

    1月22日,树莓基金会最新发布一款低成本、高性能的微控制器开发板Raspberry Pi Pico,新产品相比普通树莓体积更小,售价仅4
    发表于 02-07 07:37

    树莓烧录后死机怎么办

    树莓烧录后死机怎么办
    发表于 10-24 08:06

    远程控制树莓3b上的pi pico

    树莓pi pico树莓4相比差别很大,但是pi pico有一些特点是
    的头像 发表于 03-05 17:23 4730次阅读

    树莓也出MCU了?树莓Pico来了!

    关注、星标公众号,直达精彩内容1月22日,树莓基金会最新发布一款低成本、高性能的微控制器开发板Raspberry Pi Pico,新产品相比普通树莓
    发表于 10-28 10:36 11次下载
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>也出MCU了?<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>来了!

    树莓Pico开发板硬件扩展接口及电源模块解析

    本博文根据树莓基金会2021年1月21日公开的两部最新官方英文技术文献[1]、[2]以及博主最近使用树莓Pico开发板的一些思考与应用实
    发表于 11-07 09:06 15次下载
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>开发板硬件扩展<b class='flag-5'>接口</b>及电源模块解析

    树莓Pico:仅4美元的MCU

    1月22日,树莓基金会最新发布一款低成本、高性能的微控制器开发板Raspberry Pi Pico,新产品相比普通树莓体积更小,售价仅4
    发表于 12-04 13:06 14次下载
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>:仅4美元的MCU

    树莓pico入门学习笔记(一)

    树莓pico入门学习笔记选择自己熟悉的编程语言树莓pico提供C/C++和micropyth
    发表于 12-17 18:42 21次下载
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>pico</b>入门学习笔记(一)

    距离检测报警使用树莓Pico

    电子发烧友网站提供《距离检测报警使用树莓Pico.zip》资料免费下载
    发表于 11-09 11:49 0次下载
    距离检测报警使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>

    基于树莓pico的可编程游戏手柄设计

    方案介绍组件12x12x7.3mm 瞬时触觉按钮按钮树莓Pico通用 D1286464 OLED 显示屏操纵杆模块 PS210 欧姆电阻 组装将
    发表于 12-26 15:10 4次下载

    如何在树莓Pico上使用红外线接收模块?

    树莓 Pico 上使用红外线接收模块(HX1838 型),我们采用开源的 pico_ir 库。
    的头像 发表于 11-30 09:08 3396次阅读
    如何在<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>上使用红外线接收模块?

    树莓 Pico 2040 的“速度狂飙”:时钟速度几乎翻倍!

    树莓Pico2040的“超能力”升级如果你手头有一个树莓Pico2040,但总觉得它的性能还
    的头像 发表于 03-25 09:25 928次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b> <b class='flag-5'>Pico</b> 2040 的“速度狂飙”:时钟速度几乎翻倍!