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。

相关推荐
Zw-awa35 分钟前
协议是人为约定:同一个字节能有三种意思
stm32
国科安芯6 小时前
83 倍:ASC0108S 在推挽和开漏之间,差的不是速度,是回程
单片机·嵌入式硬件·架构·电平转换·抗辐射
国科安芯9 小时前
从遥控到自治:ASP4644S2B支撑星载电源健康管理与容错配电
网络·单片机·嵌入式硬件·安全·dcdc·低轨卫星·商业航天
rhythm-ring10 小时前
《汽车热管理系统:电子水泵单线PWM双向诊断机制》
单片机·嵌入式硬件·汽车
Dev_XH12 小时前
【成品设计】基于物联网的车间安全生产监控系统设计
stm32·单片机·嵌入式硬件·物联网
xiebs_14 小时前
【无标题】111
单片机
元器件BOM超人15 小时前
GD32E230C8T6 兆易创新Cortex-M23超值型MCU解析:规格参数、替代选型与常见问题
单片机·嵌入式硬件
LONGZHIQIN15 小时前
STM32学习笔记
笔记·stm32·学习·arm
StarsGreen16 小时前
Android 启动流程详解
android·linux·单片机·嵌入式硬件
en.en..16 小时前
AFE:模拟前端,模拟世界通往 MCU 的信号桥梁
单片机·嵌入式硬件