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。

相关推荐
不脱发的程序猿10 小时前
AI Coding时上下文不够用咋办?
单片机·嵌入式硬件·嵌入式
jghhh0111 小时前
STM32 在线升级 IAP(远程固件升级)方案
stm32
blevoice11 小时前
杰理工程师日志3:杰理芯片AC6966B开发蓝牙智能音响时,关于自己设置各种提示音常见问题
单片机·jl杰理蓝牙音频芯片·ac6966b蓝牙音响方案·杰理智能音箱开发·杰理蓝牙mp3芯片·杰理ac6965e蓝牙播放器·杰理蓝牙mcu芯片
leoFY12312 小时前
SGM3209(圣邦微 高压负压电荷泵)(与TP7660可只修改4脚,7脚即可替换)
单片机·嵌入式硬件
zlinear数据采集卡12 小时前
基准电压电路深度解析:从理论参数到ZLinear采集卡的精准参考实战
c语言·单片机·嵌入式硬件·fpga开发·自动化
bbaydnog12 小时前
FreeRTOS学习笔记 18:调试方法论——HardFault排查、栈溢出检测、运行时统计,RTOS调试三板斧
笔记·单片机·freertos
下午写HelloWorld12 小时前
GD32F4系列微控制器上电启动流程
单片机·嵌入式硬件
daad77712 小时前
记录一次ardupilot_sitl调试longitude的输入数据流
单片机·嵌入式硬件
搁浅小泽12 小时前
电子负载的作用
单片机·嵌入式硬件
周周记笔记14 小时前
【元器件专题】MOS管上下桥设计详解(死区时间)
单片机·嵌入式硬件