我正在使用 stm32L151 通过 USB CDC 与 PC 通信。我使用 stm32 HAL 库来创建我的项目。我发现 USB 以 1ms 的间隔发送数据,每次发送 64 个字节。那么,USB CDC 的最大速度是 64kbyte/s 吗?而且这个速度远低于USB全速12Mbit/s。我怎样才能达到这个速度?或者至少是这个速度的一小部分?谢谢
我想使用 Nucleo STM32F103RB 在 master 中将 NSS 引脚设置为软件模式。但我有一些问题?
在参考手册中,他们说,
在 NSS 软件模式下,设置 SPI_CR1 寄存器中的 SSM 和 SSI 位。如果在输出模式下需要 NSS 引脚,则只应设置 SSOE 位。
现在,
为什么我们需要用 SSM 设置 SSI 位?
SSOE 位的目的是什么?
我将 STM32F030RCT6 与 CubeMX 一起使用。设备是一个数据记录器,RTC 是不能失败的主要因素。在勘误表上有一些关于 RTC Shadow Register 的内容。
我将CubeMX配置为不生成MX_RTC_Init()函数,到目前为止它一直正常工作。(我正在使用 LSE)
我需要从 GSM 时间更新时间/日期,但是当我将年份设置为18时HAL_SetDate(),经过一段时间的延迟阅读HAL_GetDate(),sDate.Year给了我20。除了Year,其他值都是正确的。
我试过的:
HAL_GetDate然后HAL_SetDate我没有任何进展,事情甚至变得更糟,例如Month= 56、Day= 45 等。
提前致谢。此致。
FTDI 是否实现标准通信设备类 (CDC) USB 协议?
我需要在 STM32 上实现一个主机,以将设备连接到 FTDI 串行芯片。但谷歌搜索显示,使用 ST 的库时会出现问题。
我的板是 nucleo STM32L432KCU 板。我正在尝试使用低级 API 通过 SPI 发送字符。SPI 配置为“仅发送主机”并且硬件 NSS 信号被禁用。
不幸的是,我的代码不起作用(见下文)。当我连接逻辑分析仪时,我看不到任何东西。
这是我的代码:
SPI初始化(由CubeMX生成)
void MX_SPI1_Init(void)
{
LL_SPI_InitTypeDef SPI_InitStruct;
LL_GPIO_InitTypeDef GPIO_InitStruct;
/* Peripheral clock enable */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
/**SPI1 GPIO Configuration
PA1 ------> SPI1_SCK
PA7 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = SCLK1_to_SpW_Pin|MOSI1_to_SpW_Pin;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_5;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV8;
SPI_InitStruct.BitOrder = …Run Code Online (Sandbox Code Playgroud) 我使用 STM32 (L0 5) HAL,在进入 STOP 模式之前,我需要禁用 IWDG 或 WWDG。在 IWDG 将 MCU 从 STOP 模式重置之前,以下代码可以正常工作。对于 WWDG 使用,这要快得多,并且在调用 HAL_PWR_EnterSTOPMode 之前重置,尽管 HAL_WWDG_Refresh 在每行之后调用。我也在 Nucleo L05 上测试了这些场景。
iwdgHandle.Instance = IWDG;
iwdgHandle.Init.Prescaler = IWDG_PRESCALER_64;
iwdgHandle.Init.Window = 4095;
iwdgHandle.Init.Reload = 4095;
if (HAL_IWDG_Init(&iwdgHandle) != HAL_OK) // almost 7secs until refresh has to be called
{
_Error_Handler(__FILE__, __LINE__);
}
HAL_PWR_EnableWakeUpPin(WakeSpi_Pin);
HAL_PWREx_EnableUltraLowPower(); // Enable Ultra low power mode
HAL_PWREx_EnableFastWakeUp(); // Enable the fast wake up from Ultra low power mode
HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
Run Code Online (Sandbox Code Playgroud) 我已经使用 USB-CDC 协议对我的 stm32f103 blue-pill 板进行了编程
我可以在这个端口上读写
但是执行硬件重置后,COM 端口不可用,我必须拔下 USB 连接并重新插入,然后 COM 端口才会出现。
有可能避免这种情况吗?
-谢谢
我在 ubuntu 18.04 上使用 keil MDK 时遇到问题。经过几次试用后,我可以在我的 ubuntu 操作系统上使用 keil 的 uVision IDE。一切正常,但在尝试对我的 mcu 进行编程时,它显示“未找到 ST-Link”。但是当我坚持使用 linux 时,我尝试安装 stm32cube 程序员跳跃尝试使用 hex 文件做一些事情,但没有成功。但不知何故,我管理了 st-link 实用程序(在命令行上工作)。
现在,如果我将 eclipse 的 elf 文件转换为 bin 或 hex 并通过 st-link 实用程序加载到我的 stm32f103vet 中,它就很好用!但是当我刷新由 keil 生成的十六进制文件时,它什么也没显示。不起作用。我厌倦了尝试使用keil MDK 编写stm32。
所以如果有人在他的 linux 操作系统上使用 Keil MDK,请敲这里。请帮帮我!
我想问一下,在以下情况下,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 更容易?我不知道这甚至可能
STM32F4 发现(Cortex-M4)有 ETB,一个存储指令跟踪的缓冲区。如何使用 OpenOCD 和片上 st-link 调试器从 ETB 中提取跟踪?
我对 SWO/SWD 有点困惑。我应该使用什么?另外,我是否需要任何额外的硬件来提取跟踪?
谢谢