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

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

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

如果把&buf0作为读写函数的参数就没事,把&buf1作为参数就不行了/

因为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。

相关推荐
菥蓂寻生6 小时前
STM32移植到GD32中以105为例
stm32·单片机·嵌入式硬件
Zw-awa9 小时前
让屏幕动起来:OLED动画效果,丝滑光标、帧动画和一只贪吃蛇
stm32
橘为己有44116 小时前
51单片机:定时/计数器
单片机·51单片机
杯子不吃紫菜18 小时前
LangGraph 体系实战(下):中断恢复、流式、子图与设计模式
单片机·嵌入式硬件·设计模式
qq_4480111619 小时前
中断服务函数简介
嵌入式硬件
Risehuxyc19 小时前
STM32程序逻辑---入口函数逻辑和NVIC嵌套向量中断控制器初始化
stm32·单片机·嵌入式硬件
【 STM32开发 】19 小时前
CubeMX+STM32】SD卡U盘实现__USB+FATFS (F103 篇)
stm32·单片机·嵌入式硬件
jianqiang.xue19 小时前
3倍向量算力:Arm给最小MCU装上本地AI
arm开发·人工智能·单片机
蜀黍@猿21 小时前
ARM 汇编入门(十二):MMU、页表与虚拟内存全解析
汇编·arm开发·stm32·mcu
无敌最俊朗-1 天前
【电感专题2:电感的感抗、电路的阻抗、电流的滞后】
单片机·嵌入式硬件·元器件·电感