发新帖我要提问
12
返回列表
打印
[其他ST产品]

请问STM32如何用HAL库实现spi自通信?

[复制链接]
楼主: duo点
手机看帖
扫描二维码
随时随地手机跟帖
21
故意相遇| | 2024-1-11 14:46 | 只看该作者 回帖奖励 |倒序浏览
你直接用demo多好啊,直接看呗

使用特权

评论回复
22
白马过平川| | 2024-1-11 17:00 | 只看该作者
建议使用cubemx配置,这个比较简单而且还很容易配置出来

使用特权

评论回复
23
claretttt| | 2024-1-11 20:51 | 只看该作者
// 发送数据并接收响应
HAL_SPI_TransmitReceive(&SPI_Handle, &tx_data, rx_buffer, 1, HAL_MAX_DELAY);

使用特权

评论回复
24
风凉| | 2024-1-11 21:00 | 只看该作者
你用的STM32那款MCU啊?应该有例程的吧

使用特权

评论回复
25
捧一束彼岸花| | 2024-1-12 02:00 | 只看该作者
这个简单啊,就跟固件库差不多,就是HAL是封装了更多层的库而已

使用特权

评论回复
26
失物招領| | 2024-1-12 04:00 | 只看该作者
仿真看看接收中断进不来是不是因为那里的变量不对啊

使用特权

评论回复
27
将爱藏于深海| | 2024-1-12 06:00 | 只看该作者
按理来说,你要是用cubemx配置的话,应该接收中断自动就开启了吧,不应该进不来啊

使用特权

评论回复
28
我吃小朋友| | 2024-1-12 12:00 | 只看该作者
你是接收不到数据么?还是?

使用特权

评论回复
29
在曼谷的春| | 2024-1-12 15:00 | 只看该作者
你是不是需要调用一下rx的callback函数啊

使用特权

评论回复
30
温室雏菊| | 2024-1-12 18:00 | 只看该作者
我觉得可能是你调用的方式有问题吧,而且接收的话,看看你硬件线接对了没,之类的

使用特权

评论回复
31
西洲| | 2024-1-12 23:00 | 只看该作者
网上有关于cubemx和配置SPI的教程,你可以试试的

使用特权

评论回复
32
lzmm| | 2024-1-13 11:06 | 只看该作者
SPI_HandleTypeDef SPI_Handle;

// 使能SPI1时钟
__HAL_RCC_SPI1_CLK_ENABLE();

// 配置SPI引脚为复用功能
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = SPI_SCK_PIN | SPI_MISO_PIN | SPI_MOSI_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(SPI_PORT, &GPIO_InitStruct);

// 配置SPI参数
SPI_Handle.Instance = SPI1;
SPI_Handle.Init.Mode = SPI_MODE_MASTER;
SPI_Handle.Init.Direction = SPI_DIRECTION_2LINES;
SPI_Handle.Init.DataSize = SPI_DATASIZE_8BIT;
SPI_Handle.Init.CLKPolarity = SPI_POLARITY_LOW;
SPI_Handle.Init.CLKPhase = SPI_PHASE_1EDGE;
SPI_Handle.Init.NSS = SPI_NSS_SOFT;
SPI_Handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
SPI_Handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
SPI_Handle.Init.TIMode = SPI_TIMODE_DISABLE;
SPI_Handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
SPI_Handle.Init.CRCPolynomial = 10;
HAL_SPI_Init(&SPI_Handle);

使用特权

评论回复
33
jonas222| | 2024-1-13 12:48 | 只看该作者
在开始SPI通信之前,需要使能SPI外设的时钟。这可以通过调用HAL_SPI_Init()函数实现,该函数不仅会初始化SPI,同时也会使能SPI外设。

使用特权

评论回复
34
gygp| | 2024-1-19 10:43 | 只看该作者
SPI的MISO和MOSI引脚可以互连以实现数据在同一个设备内的传输。

使用特权

评论回复
35
51xlf| | 2024-1-19 11:49 | 只看该作者
如果需要使用中断方式处理数据传输,可以使用HAL_NVIC_SetPriority()和HAL_NVIC_EnableIRQ()函数配置中断优先级和使能中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则