ST意法半导体
登录
直播中
神之小风
12年用户
866经验值
私信
关注
[问答]
SPI半双工模式有没有什么特别的技巧?
开启该帖子的消息推送
SPI
半双工
我想知道SPI半双工模式有没有什么特别的技巧。据我所知,配置是正常完成的,只有 1 行的方向。谁能给我指出某种形式的示例,以半双工方式设置 SPI,然后通过所述端口 SPI 模式接收。我已经搜索了几天,但找不到任何具体的东西。
回帖
(1)
刘悦竹
2023-1-30 14:28:40
您在主半双工模式下配置,然后添加第 24 到 27 行
HAL_StatusTypeDef MX_SPI2_Init(SPI_HandleTypeDef* hspi)
{
HAL_StatusTypeDef ret = HAL_OK;
hspi->Instance = SPI2;
hspi->Init.Mode = SPI_MODE_MASTER;
hspi->Init.Direction = SPI_DIRECTION_1LINE;
hspi->Init.DataSize = SPI_DATASIZE_8BIT;
hspi->Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi->Init.CLKPhase = SPI_PHASE_2EDGE;
hspi->Init.NSS = SPI_NSS_SOFT;
hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi->Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi->Init.TIMode = SPI_TIMODE_DISABLE;
hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi->Init.CRCPolynomial = 7;
hspi->Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi->Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
if (HAL_SPI_Init(hspi) != HAL_OK)
{
ret = HAL_ERROR;
}
HAL_Delay(5);
SPI_1LINE_TX(hspi);
HAL_Delay(5);
__HAL_SPI_ENABLE(hspi);
}
为了以半双工方式从 SPI 接收,请使用以下命令:
void LSM6DS3_WriteReg(uint8_t reg, uint8_t setting)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,®,1,15);
HAL_SPI_Transmit(&hspi1,&setting,1,15);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
}
注意这是读取加速度计+陀螺仪芯片上寄存器的内容
要写入所述芯片,请使用以下代码:
uint8_t LSM6DS3_ReadReg(uint8_t reg)
{
uint8_t readMask;
uint8_t dataInReg;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
readMask = reg|0x80;
HAL_SPI_Transmit(&hspi1,&readMask,1,15);
__HAL_SPI_DISABLE(&hspi1);
SPI_1LINE_RX(&hspi1);
__HAL_SPI_ENABLE(&hspi1);
HAL_SPI_Receive(&hspi1,&dataInReg,1,15);
__DSB();
__DSB();
__HAL_SPI_DISABLE(&hspi1);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
SPI_1LINE_TX(&hspi1);
__HAL_SPI_ENABLE(&hspi1);
return dataInReg;
}
引脚 12B 是我当前的片选引脚。
您在主半双工模式下配置,然后添加第 24 到 27 行
HAL_StatusTypeDef MX_SPI2_Init(SPI_HandleTypeDef* hspi)
{
HAL_StatusTypeDef ret = HAL_OK;
hspi->Instance = SPI2;
hspi->Init.Mode = SPI_MODE_MASTER;
hspi->Init.Direction = SPI_DIRECTION_1LINE;
hspi->Init.DataSize = SPI_DATASIZE_8BIT;
hspi->Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi->Init.CLKPhase = SPI_PHASE_2EDGE;
hspi->Init.NSS = SPI_NSS_SOFT;
hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi->Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi->Init.TIMode = SPI_TIMODE_DISABLE;
hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi->Init.CRCPolynomial = 7;
hspi->Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi->Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
if (HAL_SPI_Init(hspi) != HAL_OK)
{
ret = HAL_ERROR;
}
HAL_Delay(5);
SPI_1LINE_TX(hspi);
HAL_Delay(5);
__HAL_SPI_ENABLE(hspi);
}
为了以半双工方式从 SPI 接收,请使用以下命令:
void LSM6DS3_WriteReg(uint8_t reg, uint8_t setting)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,®,1,15);
HAL_SPI_Transmit(&hspi1,&setting,1,15);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
}
注意这是读取加速度计+陀螺仪芯片上寄存器的内容
要写入所述芯片,请使用以下代码:
uint8_t LSM6DS3_ReadReg(uint8_t reg)
{
uint8_t readMask;
uint8_t dataInReg;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
readMask = reg|0x80;
HAL_SPI_Transmit(&hspi1,&readMask,1,15);
__HAL_SPI_DISABLE(&hspi1);
SPI_1LINE_RX(&hspi1);
__HAL_SPI_ENABLE(&hspi1);
HAL_SPI_Receive(&hspi1,&dataInReg,1,15);
__DSB();
__DSB();
__HAL_SPI_DISABLE(&hspi1);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
SPI_1LINE_TX(&hspi1);
__HAL_SPI_ENABLE(&hspi1);
return dataInReg;
}
引脚 12B 是我当前的片选引脚。
举报
更多回帖
rotate(-90deg);
回复
相关问答
SPI
半双工
请教
SPI
的
半双工模式
是如何工作的?
2022-05-31
1640
请问M480
SPI
半双工模式
的功能是什么?
2020-12-17
1245
CH573启动
半双工模式
是否支持硬件单线双向通讯
模式
?
2022-08-24
591
使用STM32F072 USART单线
半双工模式
通信,只要打开IDLE中断就会一直触发IDLE中断怎么解决?
2024-04-22
196
请问有人用过AD9361的双口
半双工模式
吗?
2018-11-21
2093
NUC131的M0芯片UART能用
半双工模式
吗?
2023-06-14
494
请问CH573串口
半双工模式
时,TXD和RXD管脚都要接么?还是只用其中一个就可以?
2022-08-05
459
请问是否有CH552的
半双工
SPI
的例程或相关介绍?
2022-09-16
485
半双工
RS485传输方式如何下载程序
2018-09-25
3581
api参考说单个iis只能
半双工
,全
双工
需要两个iis组合,全
双工模式
下两个iis使用的引脚是否可以配置成一样呢?
2023-02-17
263
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分