小编Nik*_*iko的帖子

在 STM32 传输结束时,循环 DMA 外围到内存的行为如何?

我想问一下,在以下情况下,STM32 中的 DMA SPI rx 将如何表现。我有一个名为 A 的指定(例如)96 字节数组,用于存储从 SPI 接收到的数据。我打开对每个字节进行操作的循环 SPI DMA,配置为 96 字节。是否有可能,当 DMA 将填充我的 96 字节数组时,传输完成中断将关闭,以快速将 96 字节数组复制到另一个 - B,然后循环 DMA 将开始写入 A(并破坏保存在 B 中的数据) ? 我想通过 USB 将数据从 B 快速传输(每次我从 B 中的 A 获取新数据时)到 PC。

我只是在想如何通过 USB 将 STM32 的连续数据流 SPI 传输到 PC,因为我认为每隔一定时间通过 USB 传输的 96 字节数据块比通过 STM32 将实时 SPI 流传输到 USB 更容易?我不知道这甚至可能

embedded usb spi stm32 dma

4
推荐指数
1
解决办法
5799
查看次数

STM32 USB CDC 长包接收

我需要将数据从PC发送到我的STM32F3,所以我决定使用uC中的内置USB。但现在我有一个问题 - 我想一次向 stm32 发送大量数据 - 我的意思是 200-500 字节之类的数据。

当我从 PC 发送少于 64 个图表的 minicom 数据包时 - 一切都很好 - 回调 CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) 发生一次 - 它启用 UsbRxFlag,只是为了通知正在运行的程序有可用数据。

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  if( (Buf[0] == 'A') & (Buf[1] == 'T') ){
      GPIOB->BSRR = (uint32_t)RX_Led_Pin;
      UsbRxFlag = 1;
  }

  return (USBD_OK);
  /* USER CODE END 6 */
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试向 uC 发送更多数据(只是来自 minicom 的长文本)时,会发生一些奇怪的事情 - 有时 uC 根本没有反应 - 有时它不考虑某些数据。 …

c usbserial cdc stm32

3
推荐指数
1
解决办法
7829
查看次数

标签 统计

stm32 ×2

c ×1

cdc ×1

dma ×1

embedded ×1

spi ×1

usb ×1

usbserial ×1