Tag: stm32

IAR为自定义数据定义内存区域

我想在STM32 micro中定义一个特定的内存区域来存储一些字符串。 我正在使用IAR编译器,但我找不到一个简单的例子,它可以帮助我使用icf文件以正确的方式创建区域。 如何创建区域并在代码中使用此区域? 谢谢

同步ISR访问是否需要易失性?

在下面的代码片段中,中断例程使用许多数组中的一个来执行它。 使用的数组是同步选择的, 而不是异步的 (在ISR执行时它永远不会改变)。 在单核微控制器上(如果架构很重要,这个问题假定为STM32L496), foo声明中是否需要volatile指令器? int a[] = {1, 2, 3}; int b[] = {4, 5, 6}; int * foo; //int * volatile foo? int volatile * volatile foo? main(){ disable_interrupt(); foo = a; enable_interrupt(); … disable_interrupt(); foo = b; enable_interrupt(); } void interrupt(){ //Use foo } 我的假设是不需要volatile说明符,因为foo值的任何缓存都是正确的。 编辑: 为了澄清,最后的答案是需要volatile或其他同步,因为否则可以省略或重新排序对foo写入。 缓存不是唯一的问题。

STM32:FatFs库 – f_mount

我正在编程STM32F0(Keil uVision 5)。 我曾尝试使用FatFs库来管理文件系统(SD卡)。 我写了每个初始化函数,项目正在编译而没有任何错误/警告。 但是第一个函数f_mount无法正常工作。 函数调用是: const char sciezka = ‘0’ ; FATFS *fs = (void *) 0; fresult= f_mount (fs, &sciezka, 1); 函数甚至没有到达disk_initialize的行。 我得到了结果“FR_NOT_ENABLED”(f_mount – > find_volume :::::在行fs = FatFs [vol] fs指针仍为NULL之后)。 带有示例的FatFs库位于fatFs网站: http ://elm-chan.org/fsw/ff/en/mount.html 请告诉我应该怎么做。

STM32CubeF7 BSP LCD尝试

我正在尝试使用STM32CubeF7的BSP库在stm32f769i-disco的LED上显示一个字符串。 然而,没有任何反应。 这是代码: #include “stm32f7xx_hal.h” #include “stm32f769i_discovery.h” #include “stm32f769i_discovery_lcd.h” #include “stm32f7xx.h” #include char str[] = “Hello from BSP LCD demo!”; void LCDInit() { // Initialize the LCD using the BSP_LCD_Init() function. BSP_LCD_Init(); // Select the LCD layer to be used using the BSP_LCD_SelectLayer() function. //BSP_LCD_SelectLayer(0); BSP_LCD_LayerDefaultInit(LTDC_DEFAULT_ACTIVE_LAYER, LCD_FB_START_ADDRESS); BSP_LCD_SelectLayer(LTDC_DEFAULT_ACTIVE_LAYER); // Enable the LCD display using the […]

用C语言写入STM32L4x1闪存

我试图在Windows 7上使用JTAG ST-Link / V2在STM32L476的闪存中写入。不需要上传软件,我只需要在非易失性地方写入数据,可以读取和删除它。 作为一个关于硬件的新手,只有在编写非嵌入式常规C时才有效,恐怕我可能会伤害或修改不可逆转的闪存。 此外,我不确定我能做什么或不能做什么。 我已经想到阅读手册 ,写入0x08000000内存位置似乎是一个好主意。 使用C代码调用ST-Link_Utility : const char CMD_ACCESS_ST_UTILITY[] = “cd C:/Program Files (x86)/STMicroelectronics/STM32 ST-LINK Utility/ST-LINK Utility&&ST-LINK_CLI.exe “; bool STLINKWriteSystemCalls(void) { char cmd[200] = “”; strcpy(cmd, CMD_ACCESS_ST_UTILITY); // cmd to access utility strcat(cmd, “-c”); // Then connect with ST-Link if (system(cmd) != 0) return false; // If failed exit strcpy(cmd, […]

MPU9255上的磁力计没有数据

我在MPU9255上从磁力计读取数据时遇到问题。 加速度计和陀螺仪正常工作,但我没有收到磁力计的任何数据。 我正在研究STM32F103目标。 有谁知道下面的代码有什么问题? uint8_t Settings = 0x00; uint8_t SettingsM = 0x00; uint8_t SettingsL = 0x22; //mode2 16bit //settings accelerometer and gyroscope HAL_I2C_Mem_Write(&hi2c1, 0xD0, 27, I2C_MEMADD_SIZE_8BIT, &Settings,1,1000); HAL_I2C_Mem_Write(&hi2c1, 0xD0, 28, I2C_MEMADD_SIZE_8BIT, &Settings,1,1000); //Power Down mode HAL_I2C_Mem_Write(&hi2c1, 0x0C, 0x0A, I2C_MEMADD_SIZE_8BIT, &SettingsM,1,1000); HAL_Delay(100); //16 bit output mode 2 HAL_I2C_Mem_Write(&hi2c1, 0x0C, 0x0A, I2C_MEMADD_SIZE_8BIT, &SettingsL,1,1000); while (1) { //AX […]

测试C代码中的SEGV在ARM Cortex M4处理器中经过的时间内出错

我正在为我的stm32f429板编写嵌入式操作系统的代码。 我正在测试此代码的使用时间: #include #include #include #include #include #include #define DEFAULT_DELAY 1 uint32_t m_nStart; //DEBUG Stopwatch start cycle counter value uint32_t m_nStop; //DEBUG Stopwatch stop cycle counter value #define DEMCR_TRCENA 0x01000000 /* Core Debug registers */ #define DEMCR (*((volatile uint32_t *)0xE000EDFC)) #define DWT_CTRL (*(volatile uint32_t *)0xE0001000) #define CYCCNTENA (1<= ticks) break; } } uint32_t CalcNanosecondsFromStopwatch(uint32_t nStart, […]

在C中与STM32芯片的内存交互

我想与STM32芯片的内存 STM32L476 进行交互 ,首先读取并存储其电子签名 (MCU_ID),然后在其内存中写入数据 。 我正在使用链接到JTAG ST-LINK的STM32QFP64插槽。 我在C方面做得很好但是真的开始嵌入式编程所以我选择了Atollic Studio IDE,因为它看起来非常完整并且基于Eclipse,我之前已经使用过。 我的问题是我找不到某种文档列出函数,变量等我可以用来与芯片进行交互。 我搜索了ST网站上提供的几乎所有PDF文件,阅读ST的GitHub,但由于我是初学者,我可能错过了这些信息,因为我不知道我在搜索什么样的内容。 下面的代码是不完整的 , 完全是想象的 ,但它可以帮助理解我想要做的事情,我想象的是这样: #define MEMORY_ADRESS_MCU_ID FFFFF // A memory adress ( I should be able to find it in STM32L476 documentation) #define MEMORY_ADRESS_TO_WRITE FFFF // Same unsigned extractMCUID() { return READ_IN_MEMORY(MEMORY_ADRESS_MCU_ID); // Returns the ID stored in a particular memory adress […]

重新启动后,位字段为keil hardfault

当我在闪存设备之后使用此结构时它运行良好,但在使用此结构重新启动(电源开/关)(分配给任何位)后会导致HardFault irq。 我使用Keil uVision和STM32F205。 为什么它不起作用? 我应该更改/删除/添加什么来修复它? 直接使用GPIOC-> ODR不会导致Kail中的位域有什么问题吗? #pragma anon_unions typedef union { struct { __IO uint16_t Data_Bus:8; // 0-7 data bus __IO uint16_t Ctr_Pins:6; // 8-13 control pins __IO uint16_t :2; // 14-15 unused here }; struct { __IO uint16_t D0:1; // 0 data bus pin __IO uint16_t D1:1; // 1 data bus pin […]

读取STM32 MCU的SPI数据寄存器的值

有很多类似的问题,但似乎都没有相同的问题。 我正在将STML4 MCU连接到6轴传感器(LSM6DS3)。 我已经成功地在I2C中实现了所有function,但是想要SPI的额外速度(以及DMA,如果我可以使这些第一步工作……)。 因此,对于第一步,我试图读取设备的WHO_AM_I寄存器( 0x0F ),该寄存器应以0x69回复。 这是代码: uint8_t who = 0; // Sanity check/debugging aid should get 0x5D who = 0x43 + 0x1A; // Set SS low GPIO_WritePin (GPIOB, LL_GPIO_PIN_7, GPIO_PIN_RESET); // while tx buffer is in use, wait while (!LL_SPI_IsActiveFlag_TXE(SPI1)); // Send READ command to the WHO_AM_I register (SPI1->DR) = 0x8F; // while […]