STM32坑分享——之SPI读写外部Flash引发HardWare Fault

程序要从W25Q128这个芯片读数据,这个驱动程序平时用的挺好的。然后最近程序就有那么第一段代码。执行到读数据时就HardWare Fault了。

追查原因时发现给函数传递的数组指针问题,比如定义一个数组 uint8_t buf[10]

如果把&buf[0]作为读写函数的参数就没事,把&buf[1]作为参数就不行了/

因为STM32的hal库的spi通信程序有个要求,如下:

HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

{

#if (USE_SPI_CRC != 0U)

__IO uint16_t tmpreg = 0U;

#endif /* USE_SPI_CRC */

uint32_t tickstart = 0U;

HAL_StatusTypeDef errorcode = HAL_OK;

if ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (Size > 1U))
{
/* in this case, 16-bit access is performed on Data
So, check Data is 16-bit aligned address */
assert_param(IS_SPI_16BIT_ALIGNED_ADDRESS(pData));
}

if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES))

{

hspi->State = HAL_SPI_STATE_BUSY_RX;

/* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */

return HAL_SPI_TransmitReceive(hspi, pData, pData, Size, Timeout);

}

就是标红的那里,要求数组指针的地址必须是2字节对齐的,否则就hardWare fault。

相关推荐
Nav.38 分钟前
STM32 Bootloader理解
stm32·单片机·嵌入式硬件
mftang1 小时前
STM32 CAN模块原理与应用详解
stm32·单片机·嵌入式硬件
@陽光總在風雨後1 小时前
调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录
c语言·arm开发·stm32·单片机·嵌入式硬件
Ronin-Lotus1 小时前
嵌入式硬件篇---手柄控制控制麦克纳姆轮子
嵌入式硬件·ps2·麦克纳姆轮子
集思广益的灰太狼1 小时前
如何为项目选择合适的EMI滤波器——共模与差模干扰分析
单片机·嵌入式硬件·自动化·硬件工程
C_VuI10 小时前
STM32初始安装
stm32·单片机·嵌入式硬件
爱写代码的雨一颗10 小时前
STM32-SPI通信协议
stm32·单片机·嵌入式硬件
宇希啊11 小时前
2025/03/06(嵌入式学习开始第二天)
嵌入式硬件·学习
【ql君】qlexcel12 小时前
STM32上跑SimpleFOC,电流环、速度环、位置环、棘轮软硬件全开源
stm32·电流环·simple foc·速度环·棘轮
触角0101000113 小时前
STM32步进电机驱动全解析(上) | 零基础入门STM32第五十七步
驱动开发·stm32·单片机·嵌入式硬件·物联网