我想使用 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 等。
提前致谢。此致。
更新:也许更好的问题是我应该如何调试这个问题?我正在使用 VS Code 和 OpenOCD 调试器。我总是清理构建。一旦我 JumpToApplication() ,我能做的最好的事情就是查看当我暂停/单步进入时调试器停止的地址。
我能够将程序闪存到分区 A (@address 0x8060000) 并通过 CRC 检查来验证它。该程序在 while 循环中运行任何内容(LED3 切换、UART);然而,基于定时器中断的 LED2 切换不起作用。当我正常刷新程序时(即不使用引导加载程序),它可以 100% 工作,包括 LED2 切换。
以下是我提到的一些资源(1、2、3、AN2606 )。如何让中断适用于我的第二个应用程序?资源建议我清除挂起的中断,但我不知道解决该问题的最佳方法。在我的引导加载程序应用程序中,我使用 ETH、UART 和 GPIO 外设,因此我将阅读手册并读取寄存器以清除中断标志,但是其他中断(如 NMI、HardFault)怎么样,我是否必须弄清楚如何清除这些中断?出色地?通过我的谷歌搜索,我没有找到任何方便的函数来清除所有挂起的中断,它是否存在?
下面我在 0x8000000 处包含了引导加载程序应用程序的跳转函数/链接器文件,以及在 0x8060000 处的应用程序的 main.c/链接器文件:
引导加载程序中 0x8000000 处的跳转函数
void ApplicationManager::RunActivePartition()
{
JumpToApplication = (void (*)(void)) (*((uint32_t *) (active_partition.address + 4)));
/* Set vector table offset register */
SetVectorTable(MemoryInfo::BTLR_ADDRESS, MemoryInfo::PARTITION_A_OFFSET_FROM_BTLR);
/* STM32 needs the stack pointer to start at the beginning of …Run Code Online (Sandbox Code Playgroud) 我想使用 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 的选项。
非常感谢
我正在使用 STM32F103C8T6,并希望使用 CMSIS,它本质上只是寄存器定义,没有代码,让我的生活更轻松,同时仍保持在较低水平。问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用。所有文档似乎都与特定于供应商的 IDE(例如 STM32CubeIDE)绑定。
我想要做的第一件事是下载 CMSIS 库,我在GitHub上找到了它。但是解压后ARM.CMSIS.5.6.0.pack没有发现名为stm32f10x.h. 我花了更多时间,找到了一个适用于我正在使用的特定 MCU 的 CMSIS 包,但它不包含core_cm3.h,但它存在于ARM.CMSIS.5.6.0.pack. 文档说我需要将两者都包含到我的项目中,那么我是否需要将从不同地方下载的文件复制到我的项目中,或者什么?
作为一个额外的问题:CMSIS 和 Keli 之间的关系是什么?特定于设备的 CMSIS 包是从 下载的www.keil.com,但我现在不想使用 Keil MDK,因为它似乎是一个商业产品,并且 GNU Arm 工具链为我提供了很好的服务。
编辑:我应该从一开始就更具体,但现在让我们重点关注如何构建基本 CMSIS 示例作为最小、完整且可验证的示例。
我做了什么:
/Users/nalzok/Developer/CMSIS/ARM.CMSIS.5.6.0/和/Users/nalzok/Developer/CMSIS/Packs/Keil.STM32F1xx_DFP.2.3.0/。main.c的内容复制到其中。#define STM32F10X_MD到第一行以指定芯片。:第 31 行替换为;,将第 33 行替换为 …STM32F4 发现(Cortex-M4)有 ETB,一个存储指令跟踪的缓冲区。如何使用 OpenOCD 和片上 st-link 调试器从 ETB 中提取跟踪?
我对 SWO/SWD 有点困惑。我应该使用什么?另外,我是否需要任何额外的硬件来提取跟踪?
谢谢
我一直在寻找一个可以生成 crc32-sum 的简单 python 代码。它适用于 stm32,我没有找到可调节的好例子。
为了获得正确的计算设置,我使用了下面的边。
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
设置如下:
多项式:0x4C11DB7,初始值:0xFFFFFFFF,无异或值或 0x00,也不反映输入和结果。
有人知道我在哪里可以得到一个简单的可调整算法或者我可以在哪里学习如何编写一个算法?
编辑:我使用这个函数来创建表
def create_table():
a = []
for i in range(256):
k = i
for j in range(8):
if k & 1:
k ^= 0x4C11DB7
k >>= 1
a.append(k)
return a
Run Code Online (Sandbox Code Playgroud)
以及以下用于生成 crc-sum
def crc32(bytestream):
crc_table = create_table()
crc32 = 0xffffffff
for byte in range( int(len(bytestream)) ):
lookup_index = (crc32 ^ byte) & 0xff
crc32 = (crc32 >> 8) ^ crc_table[lookup_index]
return crc32
Run Code Online (Sandbox Code Playgroud)
并用 this 调用该函数
print(hex(crc32(b"1205")))
Run Code Online (Sandbox Code Playgroud)
结果是:0x9f8e7b8c
但网站给了我:0xA7D10A0A …
我正在将 STM32F072ZB 运行到待机模式。MCU 大部分时间处于睡眠状态(每 1 小时醒来一次以读取传感器)。由于看门狗正在运行,我使用 RTC 每 25 秒生成一个警报(看门狗周期约为 28 秒)。因此,当我睡了 1 小时时,我现在及时设置闹钟 + 25 秒,然后进入待机状态,被闹钟唤醒踢看门狗并将闹钟设置为下一个 25 秒等等......
它工作得几乎正常,但由于某种原因,有时 MCU 会因为看门狗未启动而重置。这意味着我由于某种原因错过了闹钟。我做了一些测试,24 小时内发生了 6 次。
有人经历过这种问题吗?
代码在这里:
// Set RTC_Alarm
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
util_msDelay(10);
/*To configure the wake up timer to 25s the WakeUpCounter is set to 0xC738:
Wakeup Time Base = 16 /(32.768 kHz RC) = ~0.49 ms
Wakeup Time = ~0.49 ms * WakeUpCounter
Therefore, with wake-up counter = 0xC738 = 51.000
Wakeup Time = 0.49 ms * 51,000 = …Run Code Online (Sandbox Code Playgroud) 我最近在 stm32 项目中使用了 Default_Handler,但无法弄清楚它的外壳是什么:
.section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
b Infinite_Loop <--- here!
Run Code Online (Sandbox Code Playgroud)
默认情况下,许多中断被映射到默认处理程序,我可以找出实际中断原因的唯一方法是为所有中断(60+)编写处理程序并暂停调试器中的代码。呸!
我在谷歌上没有找到一个好的答案,所以我想我为其他人(或者很可能在 6 个月内为我自己)记录了解决方案......
我正在尝试在 MacOS BigSur 上安装 STM32CubeProgrammer,我已按照网站上的以下步骤进行操作: https: //community.st.com/s/question/0D50X0000BmnqrB/how-to-run-stm32cubeprogrammer-on-macos-catalina- 10151-19b88?t=1620993010340。虽然当我使用终端运行程序时,它给我一个错误,说我找不到 jre 文件夹。但从网站下载时,附带了jre文件夹、SetupSTM32CubeProgrammer-2.7.0.exe和SetupSTM32CubeProgrammer-2.7.0.app。
这是错误行:
JRE Folder not found!
Run Code Online (Sandbox Code Playgroud)
stm32 ×10
arm ×3
embedded ×3
cmsis ×2
c ×1
c++ ×1
crc32 ×1
cubemx ×1
hal ×1
interrupt ×1
master-slave ×1
openocd ×1
python ×1
python-3.x ×1
spi ×1
stm32cubeide ×1
stm32cubemx ×1
stm32f0 ×1
stm32f1 ×1
stm32f4 ×1