#HHD32F107# SPI通信

国产芯片

声明:本文旨在帮助自己记录芯片的常用配置过程。同时希望分享出自己的使用经验,让更多的人加入国产芯片的开发中。
新的技术往往都来自于模仿。从模仿到超越。芯片国产化的过程需要模仿已经比较成熟的产品,让使用者好入手,增加自己的用户量。

HHD32F107 SPI通信

首先,这里使用的是单片机内部自带的SPI模块,即硬件SPI。使用硬件SPI的好处是,在进行SPI通信时,往来的数据交给外设模块处理,内核可以响应别的操作。

1. SPI模块简介

HHD32F107 SPI

2. SPI相关的引脚

如下图所示,3路SPI引脚。
HHD32F107 SPI引脚

3. 软件引脚配置以及SPI初始化
ST_PINS pins_table[] = 
{
    __HHD_PIN(G,   11,    1,   OUTPUT,         GPIO_Mode_DEF),  // SPI1 NSS  (实际使用的是PA4 , 但是却需要配置PG11)
    __HHD_PIN(A,    5,    2,   OUTPUT,         GPIO_Mode_DEF),   // SPI1 SCLK
    __HHD_PIN(A,    6,    2,   INPUT,          GPIO_Mode_DEF),   // SPI1 MISO
    __HHD_PIN(A,    7,    2,   OUTPUT,         GPIO_Mode_DEF),   // SPI1 MOSI
};

/*
该函数可以替代统一进行的IO配置中,SPI的IO配置。
IO初始化 二选一
*/
void SPI_IOCONFIG(void)
{
#if 0
	SPI1_SSEL_PG11;
	SPI1_SCK_PG10 ;
	SPI1_MISO_PG8 ;
	SPI1_MOSI_PG9 ;
#endif

#if 1  
	SPI1_SSEL_PG11;
	SPI1_SCK_PA5;	
	SPI1_MISO_PA6;
	SPI1_MOSI_PA7;
#endif
	
}

void SPI1Init(void)
{
	/*
	SPI1
	SSI    =7 8位传输数据
	主机
	工作模式0 CP0L和CPHA两个寄存器
	传输速率100K
	*/
	SPI_Open(SPI1,  SPI_FRAME,              7,          SPI_MASTER,       SPI_MODE0,            100000);  
	
	SPI_Set_SSEL_High(SPI1);
	
	//SPI_SetClk(SPI1,1000000);//在使能SPI之前被设置
	
	return;	
}
//主要目的是得到一个8位数据(而不是16位)
uint8_t	SPIx_ReadWriteByte(HHD32F1_SPI_TypeDef* SPIx, uint16_t WriteData)
{
    uint16_t data,data1;
	data = 	WriteData;	
	data1=SPI_SingleWriteRead(SPIx,&data);//底层驱动
	return (uint8_t)data1;

}
void SetFpgaReg(uint8_t offset,uint16_t dd)
{
    SPI_Reset_SSEL_Low(SPI1);
    SPIx_ReadWriteByte(SPI1,offset);       //发送地址	 写数据
    SPIx_ReadWriteByte(SPI1,dd>>8);        //高位数据
    SPIx_ReadWriteByte(SPI1,dd&0xff);      //低位数据
    SPI_Set_SSEL_High(SPI1);
}

uint16_t GetFpgaReg(uint8_t offset)
{
    uint16_t data=0xFFFF;
    SPI_Reset_SSEL_Low(SPI1);
    SPIx_ReadWriteByte(SPI1,offset);              //发送地址	
    data =SPIx_ReadWriteByte(SPI1,0xff)<<8;     //接收高位数据
    data|=SPIx_ReadWriteByte(SPI1,0xff);        //接收低位数据
    SPI_Set_SSEL_High(SPI1);
    return data;
}



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值