本帖最后由 [鑫森淼焱垚] 于 2024-5-17 17:17 编辑
【APM32F411V Tiny Board测评】示例工程SPI_FullDuplex
SPI_FullDuplex
示例说明
管脚说明
流程
SendDataTest()
FullDuplexTest()
运行现象
传输未开始
SendDataTest
FullDuplexTest
串口日志
|
SPI_FullDuplex
示例说明
SPI1 和 SPI2 互联进行数据收发,其中 SPI1 作为 Master, SPI2 作为 Slave。
管脚说明
SPI1 Master
| SPI2 Slave
| SCK PA5
| PB10
| MISO PA6
| PC2
| MOSI PA7
| PC3
|
流程
第一步:初始化LED2 (PE6),LED3(PE5),
第二步:配置UART(PA9 是 USART1_TX, PA10 是USART1_RX),第三步:初始化两个按键 KEY1 (PA1) 和 KEY2 (PA0),
第四步:SPI 初始化,SPI1 双线全双工 Master,管脚为 PA5 SCK, PA6 MISO, PA7 MOSI; SPI2 双线全双工 Slave,管脚 PB10 SCK, PC2 MISO, PC3 MOSI。
第五步:死循环中,如果按键1按下,执行 SendDataTest() 函数;如果按键2按下,执行 FullDuplexTest() 函数。
SendDataTest()
是轮询收发模式,SPI1 发送前需检查 SPI_FLAG_TXBE 标志,等发送缓冲区为空才能发送。SPI2 接收前序检查 SPI_FLAG_RXBNE 标志,等接收缓冲区不为空才能从中取出数据。
发送接收完成,比对 txDataBufSPI1 和 rxDataBufSPI2,数据相同则点亮 LED2,数据不同则 LED2 闪烁并打印 Error。
FullDuplexTest()
同上面测试相似,不同的是 SPI2 作为 Slave ,也进行数据发送、接收,SPI1 作为 Master,同时进行数据发送、接收。
发送的条件:等待 SPI_FLAG_TXBE ,发送缓冲区为空才开始发送一个数据;等待 SPI_FLAG_RXBNE,接收缓冲区不空,才开始接收一个数据。收发完成,比对数据,数据相同则点亮 LED3,数据不同则LED3闪烁,并打印 Transfer Fail 日志。
运行现象
传输未开始
LED2 off, LED3 off
SendDataTest
按下KEY1,传输结束,数据比对成功,LED2 on
FullDuplexTest
按下 KEY2,传输结束,数据比对成功,LED2 on, LED3 on
串口日志
|