Files
hc32f460_boot/hdl/hdl_spi4.c
T
YuanHongbin 8ded5ca0dc chore: 源码编码GB2312统一转换为UTF-8
18个含有中文注释的.c/.h文件从GB2312转为UTF-8(无BOM)
2026-07-20 14:27:38 +08:00

72 lines
2.1 KiB
C

#include "hdl_spi4.h"
void hdl_spi4_init(void)
{
stc_spi_init_t stcSpiInit;
stc_gpio_init_t stcGpioInit;
LL_PERIPH_WE(LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM);
/* 閰嶇疆SPI寮曡剼 */
(void)GPIO_StructInit(&stcGpioInit);
stcGpioInit.u16PinDrv = PIN_HIGH_DRV;
stcGpioInit.u16PinDrv = PIN_HIGH_DRV;
(void)GPIO_Init(SPI4_SCLK_PORT, SPI4_SCLK_PIN, &stcGpioInit);
(void)GPIO_Init(SPI4_MOSI_PORT, SPI4_MOSI_PIN, &stcGpioInit);
(void)GPIO_Init(SPI4_MISO_PORT, SPI4_MISO_PIN, &stcGpioInit);
GPIO_SetFunc(SPI4_SCLK_PORT, SPI4_SCLK_PIN, SPI4_SCLK_FUNC);
GPIO_SetFunc(SPI4_MOSI_PORT, SPI4_MOSI_PIN, SPI4_MOSI_FUNC);
GPIO_SetFunc(SPI4_MISO_PORT, SPI4_MISO_PIN, SPI4_MISO_FUNC);
/* 閰嶇疆SPI鍙傛暟 */
SPI_StructInit(&stcSpiInit);
FCG_Fcg1PeriphClockCmd(SPI4_CLOCK, ENABLE);
stcSpiInit.u32WireMode = SPI_3_WIRE; //3绾縎PI
stcSpiInit.u32TransMode = SPI_FULL_DUPLEX; //鍏ㄥ弻宸?
stcSpiInit.u32MasterSlave = SPI_MASTER; //涓绘満
stcSpiInit.u32ModeFaultDetect = SPI_MD_FAULT_DETECT_DISABLE; // 绂佺敤妯″紡鏁呴殰妫€娴?
stcSpiInit.u32Parity = SPI_PARITY_INVD; //鏃犲鍋舵牎楠?
stcSpiInit.u32SpiMode = SPI_MD_3; //SPI妯″紡3
stcSpiInit.u32BaudRatePrescaler = SPI_BR_CLK_DIV64; //棰勫垎棰?
stcSpiInit.u32DataBits = SPI_DATA_SIZE_8BIT; //鏁版嵁瀹藉害
stcSpiInit.u32FirstBit = SPI_FIRST_MSB; //MSB楂樹綅鏈夋晥
(void)SPI_Init(SPI4_INSTANCE, &stcSpiInit);
SPI_Cmd(SPI4_INSTANCE, ENABLE);
LL_PERIPH_WP(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM);
}
uint8_t hdl_spi4_txrx(uint8_t w_data)
{
uint8_t r_data = 0;
uint16_t retry = 0;
while (RESET == SPI_GetStatus(SPI4_INSTANCE, SPI_FLAG_TX_BUF_EMPTY))
{
retry++;
if(retry > 200)
{
return 0;
}
}
SPI_WriteData(SPI4_INSTANCE, (uint32_t)w_data);
while (RESET == SPI_GetStatus(SPI4_INSTANCE, SPI_FLAG_RX_BUF_FULL))
{
retry++;
if(retry > 200)
{
return 0;
}
}
r_data = SPI_ReadData(SPI4_INSTANCE);
return r_data;
}