我有一个项目,需要向生成的 C 文件之一添加几行。但是,我要添加更改的地方没有“用户代码开始/结束”部分。因此,每当我重新生成代码时,更改都会被覆盖。我尝试添加自己的用户代码部分,如下所示,但即使如此也被覆盖。看来,CubeMX 正在寻找一组预定义的用户代码块,并覆盖其他所有内容。
/* USER CODE BEGIN 8 */
/* USER CODE END 8 */
Run Code Online (Sandbox Code Playgroud)
我希望能够定义自己的用户代码块,以便我可以在 CubeMX 尚未提供用户代码块的地方编写自定义代码。
我正在使用带有 FreeRTOS 和 STM32CubeMX 的STM32L432设备。
我尝试通过基于 ASCII 协议的 USART 实现 M2M 通信。协议序列的长度可以不同,但具有最大长度和定义的结束字符 (' \r ' / 0x0D )。
因此,我考虑使用 DMA(如FIFO)收集所有 RX-USART 数据,并使用基于USART_ICR_CMCF标志的地址匹配 isr 来确定结束字符。
初始化USART1并启用地址匹配ISR
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(uartHandle->Instance==USART1) {
/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 …Run Code Online (Sandbox Code Playgroud) 大家好,
这里有人以前遇到过这个问题吗?
在我将代码运行到 stm32f446re 中后,我无法在最后一个代码之后上传任何代码,并给出此错误“未找到 STM32 目标”
我尝试执行以下选项:-
1- 更新我的 ST-Link 驱动程序并将其作为“dpinst_amd64”运行。
2-更新我的 ST-Link 固件,它是从 STM32CubeProgrammer 运行并更新的,如图所示。
但这些解决方案都不起作用。
我想使用 CMSIS 中提供的 DSP 功能。我正在使用 STM32CubeIDE,我的目标板是 ST32F411RE Discovery。将 CMSIS DSP 与 Keil uVision 结合使用非常简单,您只需选择所需的包并使用它即可,但使用 STM32CubeIDE 就不那么简单了。CMSIS 包含在最新的固件包 STM32Cube_FW_F4_V1.24.2 中,但 CubeMX 或 IDE 中似乎没有任何选项来添加 DSP 库(存在于固件包中)。默认添加 CORE 库。我已将 DSP Include 和 Source 文件夹添加到我的工作区,我已将包含路径添加到 IDE,但是当我添加
#include "arm_math.h到main.c
我收到一条错误消息
fatal error: arm_math.h: No such file or directory它针对每个DSP源文件。
过去几天我一直在努力克服这个问题。有人在 STM32CubeIDE 中使用过 CMSIS DSP 功能吗?如果使用过,他们是如何设置 CMSIS DSP 来与 IDE 配合使用的?我的设置还有什么可以尝试的吗?我很惊讶集成的 CubeMX 代码生成器没有提供包含 DSP 的选项。
非常感谢
我有 STM32F746ZG Nucleo-144pin 板并使用 STMCubeMx 生成代码。我选择了 CubeMx 提供的 10.0.0 版本的 FreeRTOS,工具链是 SW4STM32。
我做了两个任务,以下是我的功能。我的代码在这里:
void led1_task(void)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_Delay(1000);
}
}
void led2_task(void)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14);
HAL_Delay(4100);
}
}
Run Code Online (Sandbox Code Playgroud)
我发现如果两个任务具有相同的任务优先级,则这两个任务可以正常工作,但是如果它们的任务优先级不同,则低任务不起作用。
xTaskCreate(led1_task, "led1_task", 1024, NULL, 2, NULL); ==> Works fine.
xTaskCreate(led2_task, "led2_task", 1024, NULL, 2, NULL); ==> Works fine.
----------------------------------------------------------------------------
xTaskCreate(led1_task, "led1_task", 1024, NULL, 2, NULL); ==> This task is not working.
xTaskCreate(led2_task, "led2_task", 1024, NULL, 3, NULL); ==> Works fine.
Run Code Online (Sandbox Code Playgroud)
如果两个任务的堆栈大小加起来大于 3 KB,则确认任务未正常工作。下面的代码工作正常。
xTaskCreate(led1_task, …Run Code Online (Sandbox Code Playgroud) 我在 STM32CubeIDE 中有一个项目,我使用以下命令在无头模式下从命令行运行该项目:
headless-bat -project "my-project-name/Debug" -build
并且构建成功。但是,当我尝试将同一项目复制到另一个目录并尝试运行它时,我收到此错误警告:没有与我用它编写的项目名称匹配的项目。我将项目复制到 c:/myworkplace,然后运行以下命令:
headless-bat -project "my-project-name/Debug" -workplace "c:\myworkplace" -build
但我收到了上面提到的错误。有人有什么主意吗?