您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > stm32_tm7705_ad7705_AD转换程序
/*********spi_tm7705.h**************/#ifndef__SPI_TM7705_H#define__SPI_TM7705_H#includestm32f10x.h#includeSysTick.h/*片选信号,拉低为选中*/#defineCS1_LOW()GPIO_ResetBits(GPIOA,GPIO_Pin_4)#defineCS1_HIGH()GPIO_SetBits(GPIOA,GPIO_Pin_4)#defineCS2_LOW()GPIO_ResetBits(GPIOB,GPIO_Pin_0)#defineCS2_HIGH()GPIO_SetBits(GPIOB,GPIO_Pin_0)#defineCS3_LOW()GPIO_ResetBits(GPIOB,GPIO_Pin_1)#defineCS3_HIGH()GPIO_SetBits(GPIOB,GPIO_Pin_1)#defineCS4_LOW()GPIO_ResetBits(GPIOB,GPIO_Pin_5)#defineCS4_HIGH()GPIO_SetBits(GPIOB,GPIO_Pin_5)/*DRDY拉低为可以读取*/#defineDRDY1_LOW()GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)#defineDRDY2_LOW()GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)#defineDRDY3_LOW()GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)#defineDRDY4_LOW()GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)voidSPI_TM7705_Init(void);u8SPI1_ReadWriteByte(u8TxData);voidTM7705_Init(void);voidReadAD(void);#endif/*__SPI_TM7705_H*//*********spi_tm7705.h**************//***********spi_tm7705.c***************//*****************************************文件名:spi_tm7705.c*描述:spi_tm7705底层应用函数库*实验平台:*硬件连接----------------------------**PA5-SPI1-SCK:CLK*PA6-SPI1-MISO:DOUT*PA7-SPI1-MOSI:DIN**PA4:CS1*PB0:CS2*PB1:CS3*PB5:CS4**PB12:DRDY1*PB13:DRDY2*PB14:DRDY3*PB15:DRDY4*----------------------------*库版本:ST3.0.0***********************************************************************************/#includespi_tm7705.hu16ADResult[4];//存储AD结果的数组/*******************************************************************************初始化SPI1与tm7705的接口*******************************************************************************/voidSPI_TM7705_Init(void){SPI_InitTypeDefSPI_InitStructure;GPIO_InitTypeDefGPIOA_InitStructure;GPIO_InitTypeDefGPIOB_InitStructure;/*配置外设时钟*//*!SPI_FLASH_SPI_CS_GPIO,SPI_FLASH_SPI_MOSI_GPIO,SPI_FLASH_SPI_MISO_GPIO,SPI_FLASH_SPI_DETECT_GPIOandSPI_FLASH_SPI_SCK_GPIOPeriphclockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);/*!Periphclockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);/*!AFIOPeriphclockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/*!ConfigureSCK*/GPIOA_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIOA_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIOA_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIOA_InitStructure);///*!ConfigureMISO*///GPIOA_InitStructure.GPIO_Pin=GPIO_Pin_6;//GPIO_Init(GPIOA,&GPIOA_InitStructure);/////*!ConfigureMOSI*///GPIOA_InitStructure.GPIO_Pin=GPIO_Pin_7;//GPIO_Init(GPIOA,&GPIOA_InitStructure);/*!ConfigureCS1*/GPIOB_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIOB_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIOB_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置引脚速率为50MHZGPIO_Init(GPIOA,&GPIOB_InitStructure);/*!ConfigureCS2,3,4*/GPIOB_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;GPIOB_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIOB_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置引脚速率为50MHZGPIO_Init(GPIOB,&GPIOB_InitStructure);/*!ConfigureDRDY1,2,3,4*/GPIOB_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;GPIOB_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIOB_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置引脚速率为50MHZGPIO_Init(GPIOB,&GPIOB_InitStructure);/*将片选信号全部拉高*/CS1_HIGH();CS2_HIGH();CS3_HIGH();CS4_HIGH();/*SPI1configuration*///设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//设置SPI工作模式:设置为主SPISPI_InitStructure.SPI_Mode=SPI_Mode_Master;//设置SPI的数据大小:SPI发送接收8位帧结构SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//选择了串行时钟的稳态:时钟悬空高SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;//数据捕获于第二个时钟沿SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;//NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;//定义波特率预分频的值:波特率预分频值为256SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256;//flash读写中这里是4//指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;//CRC值计算的多项式SPI_InitStructure.SPI_CRCPolynomial=7;//根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器SPI_Init(SPI1,&SPI_InitStructure);/*EnableSPI1*/SPI_Cmd(SPI1,ENABLE);//使能SPI外设}/**************************************SPIx读写一个字节TxData:要写入的字节返回值:读取到的字节*****************************************/u8SPI1_ReadWriteByte(u8TxData){while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//检查指定的SPI标志位设置与否:发送缓存空标志位/*SendbytethroughtheSPI1peripheral*/SPI_I2S_SendData(SPI1,TxData);//通过外设SPI1发送一个数据/*Waittoreceiveabyte*/while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//检查指定的SPI标志位设置与否:接受缓存非空标志/*ReturnthebytereadfromtheSPIbus*/returnSPI_I2S_ReceiveData(SPI1);//返回通过SPIx最近接收的数据}/********tm7705初始化函数***********/voidTM7705_Init(void){unsignedchari;CS1_LOW();Delay_us(10);for(i=0;i100;i++){SPI1_ReadWriteByte(0xFF);//持续DIN高电平写操作,恢复tm7705接口}SPI1_ReadWriteByte(0x20);//通道1,下一个写时钟寄存器/********2016.1.21实地测试通过**********SPI1_ReadWriteByte(0x08);//写时钟寄存器设置更新速率为60Hz,使用内部时钟**************************************/SPI1_ReadWriteByte(0x08);SPI1_ReadWriteByte(0x10);//通道1,下一个写设置寄存器/********2016.1.21实地测试通过**********SPI1_ReadWriteByte(0x70);//写设置寄存器,设置成双极性、无缓冲、增益为2、滤波
本文标题:stm32_tm7705_ad7705_AD转换程序
链接地址:https://www.777doc.com/doc-2860944 .html