我正在试图弄清楚如何使用这个新的HAL驱动程序.我希望使用HAL_UART_Receive_IT()设置设备的数据来接收数据时运行中断功能.
问题是你必须在中断触发之前指定要读取的数据长度.我计划像不同长度的命令一样发送控制台,因此不能有固定的长度.我假设唯一的方法是一次读取单个字符并构建一个单独的字符串.
HAL驱动程序似乎有一个问题,如果您设置HAL_UART_Receive_IT()接收x字符数,然后尝试发送多个x字符,将出现错误.
目前我不知道我是否正确的方式,任何想法?
在STM32F4上有两种模拟EEPROM的方法:
第二个选项在这里描述:AN3969.
但遗憾的是,谷歌未能提供有关如何使用第一个选项的信息 - 使用4Kb备份SRAM作为EEPROM?
任何人都可以帮助这个话题吗?
我正在尝试使用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)
但我得到了相同的结果..
维基百科说:
弱符号表示在链接可执行和可链接格式 (ELF) 目标文件期间的特殊注释符号。默认情况下,没有任何注释,目标文件中的符号是强符号。在链接期间,强符号可以覆盖同名的弱符号。相比之下,共享名称的两个强符号在链接时会产生链接错误。链接二进制可执行文件时,弱声明的符号不需要定义。相比之下,(默认情况下)没有定义的声明强符号会触发未定义符号链接错误。C或C++语言标准没有提到弱符号;因此,将它们插入代码不是很便携。即使两个平台支持将符号标记为弱的相同或相似的语法,语义也可能在细微之处有所不同,例如
什么是弱函数,它们的用途是什么?我正在使用 stm32f429 微控制器。库中有一些弱函数。但我无法理解,它们是什么以及它们的用途!
我在谷歌上搜索了它,但没有得到满意的答案。
我一直致力于STM32F4发现的音频项目,我注意到一件事,所有I2S标准仅适用于一个麦克风(取决于标准使用单独位的哪个边缘).例如.飞利浦,MSB或LSB标准使用下降沿作为位触发器,仅捕获接地的L/R麦克风,如果我使用使用上升沿作为位触发的PCM标准,则仅捕获高L/R麦克风.我找不到在一个时期内捕获两个MEMS麦克风样品的方法.没有外部IC,STM32F4是否不能同时使用麦克风?
我已经找到了大量的例子,但没有提到如何从STM32MXCube"正确"地做到这一点.
如何从STM32CubeMX创建用于USB CDC虚拟COM端口通信的骨架代码(如果可能的话,STM32F4发现)?
所以我尝试将硬件NSS信号与HAL库一起使用,但我找不到任何使NSS引脚具有低电平或高电平的功能.我也试图在HAL文档中找到答案,但也没有任何信息.Internet中的所有示例仅包含NSS软件.如何使用硬件NSS?
我拥有一块STM32F4Discovery板,它包含一个STM32F4微控制器和一个ST-LINKv2调试器接口.我想在这个设置上做一些简单的C编程,并希望使用免费的工具来完成它.
这就是我所知道的:
这是我不知道的:如何将这些碎片组合成一个连贯的整体.我相信所有必要的活动部件都存在,但我对如何组装它们感到茫然.我找到了点点滴滴,通常以"安装Eclipse Indigo"之类的东西开头.是否有简单的教程,步骤列表或要检查的内容?
我在 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
我正在使用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) stm32f4discovery ×10
stm32 ×6
stm32f4 ×2
arm ×1
c ×1
eclipse ×1
eeprom ×1
flash-memory ×1
freertos ×1
gcc ×1
hal ×1
microphone ×1
openocd ×1
round-robin ×1
scheduling ×1
spi ×1
standards ×1
stm32f7 ×1
usb ×1