根据官方实例代码修改而成,具体寄存器参数请参考手册。
全双工模式,8位数据,有效位为最高位。
预分频结果最终在芯片工作范围内即可。
SPI模式0.CS片选信号是自己用软件设定。
仅列出读写寄存器修改,后续函数无需修改。
#include "wk2124.h"
/*************************************************************************/
//函数功能:写寄存器
//参数: port:串口号(1-4)
// reg:寄存器地址
// dat:写入寄存器的数据
//*************************************************************************/
void Wk2xxxWriteReg(uint8_t port,uint8_t reg,uint8_t dat)
{
uint8_t send_reg=(((port-1)<<4)+reg); //高两位为子串口通道号,低4位为寄存器地址 00-11串口1-4
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,&send_reg,sizeof(send_reg),100);
HAL_SPI_Transmit(&hspi1,&dat,sizeof(dat),100);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET);
}
/*************************************************************************/
//函数功能:读寄存器函数
//参数:port:为子串口的数(C0C1)
// reg:为寄存器的地址(A3A2A1A0)
// rec_data:为读取到的寄存器值
//注意:在子串口被打通的情况下,读FDAT,实际上就是读取uart的rx接收的数据
/*************************************************************************/
uint8_t Wk2xxxReadReg(uint8_t port,uint8_t reg)
{
uint8_t rec_data;
uint8_t send_reg=(0x40+((port-1)<<4)+reg);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,&send_reg,sizeof(send_reg),100);
HAL_SPI_Receive(&hspi1,&rec_data, sizeof(rec_data),100);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET);
return rec_data;
}
/**************************** Wk2xxxWriteFifo*********************************************/
//函数功能:该函数为写FIFO函数,通过该函数写入的数据会直接进入子串口的发送FIFO,然后通过TX引脚发送
//参数:port:为子串口的端口号(C0\C1)
// *wbuf:写入数据部分
// len: 写入数据长度
//
/*************************************************************************/
void Wk2xxxWriteFifo(uint8_t port,uint8_t *wbuf,uint8_t len)
{ uint8_t n;
uint8_t send_reg=(0x80+((port-1)<<4));
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,&send_reg,1,100);
HAL_SPI_Transmit(&hspi1,wbuf,len,100);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET);
}
/**************************** Wk2xxxReadFifo*********************************************/
//函数功能:该函数为读FIFO函数,通过该函数可以一次读出多个接收FIFO中的数据,最多256个字节
//参数:port:为子串口的端口号(C0\C1)
// *rbuf:写入数据部分
// len: 写入数据长度
//
/*************************************************************************/
void Wk2xxxReadFifo(uint8_t port,uint8_t *rbuf,uint8_t len)
{ uint8_t n;
uint8_t send_reg=(0xc0+((port-1)<<4));
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,&send_reg,1,10);
HAL_SPI_Receive(&hspi1,rbuf, len, 100);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET);
//return 0;
}
/*************************************************************************/
//函数功能:此函数主要是通过读写wk2xxx的寄存器来判断主接口的通信时序是否有问题
//参数:无
//返回值:rv表示返回值,0成功
/*************************************************************************/
uint8_t Wk2xxxTest() //测试通讯是否正常
{
if(Wk2xxxReadReg(WK2XXX_GPORT,WK2XXX_GENA)==0x30)
return 1;
else
return 0;
}
一般使用Wk2xxxWriteFifo和Wk2xxxReadFifo
port:串口1-4
*wbuf 数组
len 数组长度