STM32 硬件SPI应用 WK2124串口扩展芯片

根据官方实例代码修改而成,具体寄存器参数请参考手册。

全双工模式,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 数组长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风飘零翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值