维基百科说:
弱符号表示在链接可执行和可链接格式 (ELF) 目标文件期间的特殊注释符号。默认情况下,没有任何注释,目标文件中的符号是强符号。在链接期间,强符号可以覆盖同名的弱符号。相比之下,共享名称的两个强符号在链接时会产生链接错误。链接二进制可执行文件时,弱声明的符号不需要定义。相比之下,(默认情况下)没有定义的声明强符号会触发未定义符号链接错误。C或C++语言标准没有提到弱符号;因此,将它们插入代码不是很便携。即使两个平台支持将符号标记为弱的相同或相似的语法,语义也可能在细微之处有所不同,例如
什么是弱函数,它们的用途是什么?我正在使用 stm32f429 微控制器。库中有一些弱函数。但我无法理解,它们是什么以及它们的用途!
我在谷歌上搜索了它,但没有得到满意的答案。
我不能让自动波特率检测工作STM32L0.我正在使用硬件抽象层(HAL).
我的初始化代码是:
/* USART1 init function */
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 300;
huart1.Init.WordLength = UART_WORDLENGTH_9B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_EVEN;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_AUTOBAUDRATE_INIT;
huart1.AdvancedInit.AutoBaudRateEnable = UART_ADVFEATURE_AUTOBAUDRATE_ENABLE;
huart1.AdvancedInit.AutoBaudRateMode = UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT;
HAL_UART_Init(&huart1);
}
Run Code Online (Sandbox Code Playgroud)
我通过UART1发送的字节是:
0 1 2 3 4 5 6 7 8
000x 68 0B 0B 68 53 FD 52 FF FF .. etc.
0x68 = 0b01101000
0x0B = 0b00001011
0xFD = …Run Code Online (Sandbox Code Playgroud) 我在通过https://docs.rust-embedded.org/discovery/03-setup/index.html安装时遵循此操作 ,它会引发错误
如何解决此错误?itmdumpcargo install itm --vers 0.3.1error: failed to fetch https://github.com/rust-lang/crates.io-index Caused by:
error inflating zlib stream; class=Zlib (5)
问题与主题一样简单。如何在STM32中延迟确切的一个时钟周期?如果控制器以168MHz运行,则一个时钟周期等于1 / 168MHz,即5.95ns吗?
我正在使用 STM32L152RB 板,我正在尝试配置系统时钟以使用 PLL 时钟,但 RCC_FLAG_PLLRDY 标志正在设置,因此程序卡在 while 循环中。请让我做错了什么
EnableHSI();
RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_3,RCC_PLLDiv_2);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK);
t=GetSystemClockSource();
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 STLINK 连接器从 Linux 在命令行中刷新 ST 板(STM32 发现套件 STM32L072)。
要使用 STLINK 进行闪存,您只需将要闪存的二进制文件复制粘贴到 USB 读卡器(与 STLINK 关联)中即可;
为此,使用dmesg,我找到了/dev/sdx。然后我挂载/dev/sdx:
mkdir /mnt/board
sudo mount /dev/sdx /mnt/board
Run Code Online (Sandbox Code Playgroud)
使用ls命令我可以读取 ST 板的文件夹:
$ ls /mnt/board/
DETAILS.TXT MBED.HTM
Run Code Online (Sandbox Code Playgroud)
==>我可以读ST板。
现在我可以将二进制文件复制到 ST 板上。复制后应该自动完成刷新:
sudo cp mybinarytoflash.bin /mnt/board
Run Code Online (Sandbox Code Playgroud)
我们可以看到 STLINK 的 LED 呈绿色闪烁。二进制文件正在闪烁。
但我有两个主要问题:
有时,将二进制文件复制到/mnt/board后,不会立即将二进制文件刷新到 ST 板。有时我们必须等待 30 秒以上。
我的第二个问题是,刷机后,ST板没有RESET。当我在装有Windows的计算机上执行此过程时,ST板在闪烁后重置。我需要对/dev/sdx或其他东西做一些事情吗?
非常感谢你,纪尧姆