标签: stm32f4discovery

STM32F4 UART HAL驱动程序

我正在试图弄清楚如何使用这个新的HAL驱动程序.我希望使用HAL_UART_Receive_IT()设置设备的数据来接收数据时运行中断功能.

问题是你必须在中断触发之前指定要读取的数据长度.我计划像不同长度的命令一样发送控制台,因此不能有固定的长度.我假设唯一的方法是一次读取单个字符并构建一个单独的字符串.

HAL驱动程序似乎有一个问题,如果您设置HAL_UART_Receive_IT()接收x字符数,然后尝试发送多个x字符,将出现错误.

目前我不知道我是否正确的方式,任何想法?

hal stm32 stm32f4discovery

18
推荐指数
2
解决办法
6万
查看次数

如何在STM32F4中将备份SRAM用作EEPROM

在STM32F4上有两种模拟EEPROM的方法:

  1. 片上4 KB备份SRAM
  2. 片上Flash,具有特定的软件算法

第二个选项在这里描述:AN3969.

但遗憾的是,谷歌未能提供有关如何使用第一个选项的信息 - 使用4Kb备份SRAM作为EEPROM?

任何人都可以帮助这个话题吗?

stm32 eeprom stm32f4discovery

14
推荐指数
3
解决办法
3万
查看次数

在Flash中为用户数据分配内存(STM32F4 HAL)

我正在尝试使用STM32F405的内部闪存来存储一堆用户可设置的字节,这些字节在重新启动后仍然存在.

我正在使用:

uint8_t userConfig[64] __attribute__((at(0x0800C000)));
Run Code Online (Sandbox Code Playgroud)

为我想要存储的数据分配内存.

当程序启动时,我检查第一个字节是否设置为0x42,如果没有,我使用以下方法设置:

HAL_FLASH_Unlock();
HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42);
HAL_FLASH_Lock();
Run Code Online (Sandbox Code Playgroud)

之后,我检查了价值userConfig[0],我看到0x42......太棒了!

然而,当我点击重置时,再次查看该位置,它0x42不再是......

知道我哪里错了吗?我也尝试过:

#pragma location = 0x0800C00
volatile const uint8_t userConfig[64]
Run Code Online (Sandbox Code Playgroud)

但我得到了相同的结果..

microcontroller stm32 flash-memory stm32f4discovery

12
推荐指数
1
解决办法
2万
查看次数

什么是弱函数,它们的用途是什么?我正在使用 stm32f429 微控制器

维基百科说:

弱符号表示在链接可执行和可链接格式 (ELF) 目标文件期间的特殊注释符号。默认情况下,没有任何注释,目标文件中的符号是强符号。在链接期间,强符号可以覆盖同名的弱符号。相比之下,共享名称的两个强符号在链接时会产生链接错误。链接二进制可执行文件时,弱声明的符号不需要定义。相比之下,(默认情况下)没有定义的声明强符号会触发未定义符号链接错误。C或C++语言标准没有提到弱符号;因此,将它们插入代码不是很便携。即使两个平台支持将符号标记为弱的相同或相似的语法,语义也可能在细微之处有所不同,例如

什么是弱函数,它们的用途是什么?我正在使用 stm32f429 微控制器。库中有一些弱函数。但我无法理解,它们是什么以及它们的用途!

我在谷歌上搜索了它,但没有得到满意的答案。

c stm32f4discovery stm32ldiscovery stm32f4

10
推荐指数
2
解决办法
1万
查看次数

STM32F4立体声MEMS麦克风

我一直致力于STM32F4发现的音频项目,我注意到一件事,所有I2S标准仅适用于一个麦克风(取决于标准使用单独位的哪个边缘).例如.飞利浦,MSB或LSB标准使用下降沿作为位触发器,仅捕获接地的L/R麦克风,如果我使用使用上升沿作为位触发的PCM标准,则仅捕获高L/R麦克风.我找不到在一个时期内捕获两个MEMS麦克风样品的方法.没有外部IC,STM32F4是否不能同时使用麦克风?

standards microphone stm32f4discovery

9
推荐指数
1
解决办法
1355
查看次数

STM32CubeMX USB CDC VCP?

我已经找到了大量的例子,但没有提到如何从STM32MXCube"正确"地做到这一点.

如何从STM32CubeMX创建用于USB CDC虚拟COM端口通信的骨架代码(如果可能的话,STM32F4发现)?

usb stm32 stm32f4discovery

8
推荐指数
2
解决办法
4万
查看次数

如何在stm32f4上使用硬件NSS(SPI)?

所以我尝试将硬件NSS信号与HAL库一起使用,但我找不到任何使NSS引脚具有低电平或高电平的功能.我也试图在HAL文档中找到答案,但也没有任何信息.Internet中的所有示例仅包含NSS软件.如何使用硬件NSS?

microcontroller arm spi stm32 stm32f4discovery

8
推荐指数
2
解决办法
3万
查看次数

如何配置Eclipse,GCC和OpenOCD以使用STM32F4Discovery板?

我拥有一块STM32F4Discovery板,它包含一个STM32F4微控制器和一个ST-LINKv2调试器接口.我想在这个设置上做一些简单的C编程,并希望使用免费的工具来完成它.

这就是我所知道的:

  • 可以使用各种工具链(例如YAGARTO或其他工具)将Eclipse配置为针对各种ARM目标进行交叉编译.
  • Eclipse可以使用GDB进行远程调试.
  • OpenOCD提供了一个GDB服务器.
  • OpenOCD(最新版本)特别支持ST-LINKv2和STM32F4Discovery板(包括该板的脚本).

这是我不知道的:如何将这些碎片组合成一个连贯的整体.我相信所有必要的活动部件都存在,但我对如何组装它们感到茫然.我找到了点点滴滴,通常以"安装Eclipse Indigo"之类的东西开头.是否有简单的教程,步骤列表或要检查的内容?

eclipse gcc openocd stm32f4discovery

7
推荐指数
1
解决办法
4214
查看次数

任务在循环调度中表现不正确

我在 STM32F4DISCOVERY 板上运行 FreeRTOS,我有以下代码:

xTaskCreate( vTask1, "Task 1", 200, NULL, 1, NULL );
xTaskCreate( vTask2, "Task 2", 200, NULL, 1, NULL );
vTaskStartScheduler();
Run Code Online (Sandbox Code Playgroud)

其中 vTask1 是这个函数:

void vTask1( void *pvParameters )
{
volatile unsigned long ul;

    for( ;; )
    {
        LED_On(0);

        for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )
        {
        }
        LED_On(2);
        LED_Off(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

vTask2 有几乎相同的代码:

void vTask2( void *pvParameters )
{
const char *pcTaskName = "Task 2 is running\n";
volatile unsigned long ul;

    for( ;; )
    { …
Run Code Online (Sandbox Code Playgroud)

operating-system scheduling round-robin freertos stm32f4discovery

6
推荐指数
1
解决办法
321
查看次数

在STM32板上运行后如何更改UART波特率?

我正在使用STM32F746ZG并使用五个UARTs. All UARTs工作正常。有人可以告诉我在USART初始化后更改波特率的程序吗?我正在使用USART6和初始化9600波特率。开机后,没有任何通讯USART。我想将波特率从9600 to 57600 or 115200. 对于这个改变,我打了电话HAL_UART_DeInit()MX_USART6_UART_Init_57600()但它不起作用。如果我没有改变波特率,它工作正常。但是如果我改变了波特率,我无法通过以下方式接收数据USART. 如果有人知道解决方案,请告诉我。

以下是我的代码。

int main(void)
{
  HAL_Init();

  SystemClock_Config();


  MX_UART7_Init();
  MX_UART8_Init();
  MX_USART2_UART_Init();
  MX_USART3_UART_Init();
  MX_USART6_UART_Init();

}

void MX_USART6_UART_Init(void)
{
  huart6.Instance = USART6;
  huart6.Init.BaudRate = 9600;
  huart6.Init.WordLength = UART_WORDLENGTH_8B;
  huart6.Init.StopBits = UART_STOPBITS_1;
  huart6.Init.Parity = UART_PARITY_NONE;
  huart6.Init.Mode = UART_MODE_TX_RX;
  huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart6.Init.OverSampling = UART_OVERSAMPLING_16;
  huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart6) != HAL_OK)
  {
    Error_Handler(); …
Run Code Online (Sandbox Code Playgroud)

stm32 stm32f4discovery stm32f4 stm32f7

6
推荐指数
1
解决办法
4671
查看次数