9 个版本

0.2.0 2020年9月30日
0.1.8 2020年9月16日
0.1.5 2020年8月11日
0.1.3 2020年7月30日

#593 in 嵌入式开发

每月下载量:38
correlation_flow 中使用

BSD-3-Clause

53KB
945

px4flow_bsp

Rust no_std 嵌入式 HAL 板级支持包,用于 PX4FLOW 光流传感器硬件。

嵌入式示例

这些示例设计为与支持 J-Link / RTT 的调试器一起使用。我们提供了一些不同的运行方式

  • 使用 Segger 工具(当前默认)
  • 使用 probe-run(目前处于开发中,可能无法按预期工作。)

安装 Segger 工具

  • 编辑 配置文件,选择 segger.gdb 运行器
  • 在一个 shell 中运行: ./start_gdb_server_jlink.sh
  • 在另一个 shell 中运行: JLinkRTTClient
  • 然后运行您选择的示例

安装 probe-run

  • 编辑 配置文件,选择 probe-run 运行器
  • 将 JLink 调试器连接到您的 PX4FLOW 并运行示例(见下文)
  • 请注意,与 Segger 工具相比,RTT 输出到终端可能会慢得多。

运行示例

cargo run  --example play --features  rttdebug

中断处理

目前您需要配置您的应用程序以从应用程序级别的中断处理程序转发中断,即

/// should be called whenever DMA2 completes a transfer
#[interrupt]
fn DMA2_STREAM1() {
    // forward to board's interrupt handler
    unsafe {
        (*BOARD_PTR.load(Ordering::SeqCst)).handle_dma2_stream1_interrupt();
    }
}

/// should be called whenever DCMI completes a frame
#[interrupt]
fn DCMI() {
    // forward to board's interrupt handler
    unsafe {
        (*BOARD_PTR.load(Ordering::SeqCst)).handle_dcmi_interrupt();
    }
}

这假设您正在使用 cortex-m-rt crate 来构建您的嵌入式应用程序,并使用其 #[interrupt] 来处理中断。

状态

开发中

  • 不会覆盖通常随板子一起提供的默认 PX4FLOW 启动加载程序
  • 设置 DCMI 以从摄像头读取的示例
  • 支持 spi2(l3gd20 陀螺仪)
  • 支持 i2c1(外部 i2c 通信)
  • 支持 i2c2(MT9V034 配置端口和 eeprom)
  • 支持 USART2、USART3 和 UART4(声纳)
  • 支持 i2c2 上的串行 eeprom
  • DCMI 外设的初始设置
  • DMA2 的初始设置
  • DCMI→DMA2→图像缓冲区流水线基本正常
  • 支持使用 probe-run 运行示例
  • 支持使用 120x120 流帧(480 像素高度的第 4 个二进制文件)
  • 支持可配置/全帧图像缓冲区(目前限制为 64x64)
  • 支持使用MT9V034的完整10位bpp灰度分辨率

注意

  • 唯一支持的调试模式是带有rttdebug功能的RTT。这是因为PX4FLOW 1.x和2.x板仅提供SWD接口(没有简单的ITM解决方案)。
  • breakout功能旨在用于库开发和调试。目前它已配置为与"DevEBox STM32F4XX_M Ver:3.0"板(STM32F407VGT6)一起使用,该板不包括l3gd20陀螺仪或eeprom,例如Arducam MT9V034分线板("UC-396 RevA")。
  • 这已在CUAV PX4FLOW v2.3上进行过测试。在这块特定的板上,板底标注的SWD和SWCLK焊盘似乎已交换。

MCU引脚映射

引脚 配置
PA0 UART4_TX ("TIM5_CH1" - N/C)
PA1 "TIM5_CH2"(未使用 - N/C)
PA2 TIM5_CH3_EXPOSURE(拉低)
PA3 TIM5_CH4_STANDBY(拉低)
PA4 DCMI_HSYNC
PA5 CAM_NRESET(连接到高电平)
PA6 DCMI_PIXCK
PB6 DCMI_D5
PB7 DCMI_VSYNC
PB8 I2C1 SCL
PB9 I2C1 SDA
PB10 I2C2 SCL
PB11 I2C2 SDA
PB12 spi_cs_gyro
PB13 SPI2 SCLK
PB14 SPI2 CIPO
PB15 SPI2 COPI
PC6 DCMI_D0
PC7 DCMI_D1
PC8 XCLK
PC9 "TIM8_CH4_LED_OUT"(未使用)
PC10 DCMI_D8
PC11 UART4_RX
PC12 DCMI_D9
PD0 TBD
PD5 TBD
PD6 TBD
PD7 TBD
PD15 TBD
PE0 DCMI_D2
PE1 DCMI_D3
PE2 user_led0
PE3 user_led1
PE4 DCMI_D4
PE5 DCMI_D6
PE6 DCMI_D7
PE7 user_led2

依赖项

~55MB
~1.5M SLoC