初级会员

- 积分
- 91
- 金钱
- 91
- 注册时间
- 2014-8-24
- 在线时间
- 76 小时
|
90金钱
本帖最后由 匆匆过客01 于 2021-5-18 18:59 编辑
用stm32H743读ads1675数据,数据是24位的,但是sclk时钟始终多出16bit,以读一个字节8bit为例,时钟输出24个时钟。
代码如下:
void SPI2_Init(void)
{
RCC->AHB4ENR|=1<<8; //使能PORTI时钟
RCC->APB1LENR|=1<<14; //SPI2时钟使能
GPIO_Set(GPIOI,3<<1,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_FAST,GPIO_PUPD_PU); //PI1~2复用功能输出
GPIO_AF_Set(GPIOI,1,5); //PI1,AF5
GPIO_AF_Set(GPIOI,2,5); //PI2,AF5
//配置SPI的时钟源
RCC->D2CCIP1R&=~(7<<12); //SPI123SEL[2:0]=0,清除原来的设置
RCC->D2CCIP1R|=0<<12; //SPI123SEL[2:0]=1,选择pll1_q_ck作为SPI1/2/3的时钟源,一般为200Mhz
//即:spi_ker_ck=200Mhz
//这里只针对SPI口初始化
RCC->APB1LRSTR|=1<<14; //复位SPI2
RCC->APB1LRSTR&=~(1<<14); //停止复位SPI2
SPI2->CR1|=1<<12; //SSI=1,设置内部SS信号为高电平
SPI2->CFG1=7<<28; //MBR[2:0]=7,设置spi_ker_ck为256分频.
SPI2->CFG1|=7<<0; //DSIZE[4:0]=7,设置SPI帧格式为8位,即字节传输
tempreg=(u32)1<<31; //AFCNTR=1,SPI保持对IO口的控制
tempreg|=0<<29; //SSOE=0,禁止硬件NSS输出
tempreg|=1<<26; //SSM=1,软件管理NSS脚
tempreg|=1<<25; //CPOL=1,空闲状态下,SCK为高电平
tempreg|=1<<24; //CPHA=1,数据采样从第2个时间边沿开始
tempreg|=0<<23; //LSBFRST=0,MSB先传输
tempreg|=1<<22; //MASTER=1,主机模式
tempreg|=1<<19; //SP[2:0]=0,摩托罗拉格式
tempreg|=2<<17; //COMM[1:0]=0,全双工通信
SPI2->CFG2=tempreg; //设置CFG2寄存器
SPI2->I2SCFGR&=~(1<<0); //选择SPI模式
SPI2->CR1|=1<<0; //SPE=1,使能SPI2
SPI2_ReadByte(); //启动传输
}
//SPI2 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI2_ReadByte(void)
{
u8 RxData=0;
SPI2->CR1|=1<<0; //SPE=1,使能SPI2
SPI2->CR1|=1<<9; //CSTART=1,启动传输
// while((SPI2->SR&1<<1)==0); //等待发送区空
// *(vu8 *)&SPI2->TXDR=TxData; //发送一个byte,以传输长度访问TXDR寄存器
while((SPI2->SR&1<<0)==0); //等待接收完一个byte
RxData=*(vu8 *)&SPI2->RXDR; //接收一个byte,以传输长度访问RXDR寄存器
SPI2->IFCR|=3<<3; //EOTC和TXTFC置1,清除EOT和TXTFC位
SPI2->CR1&=~(1<<0); //SPE=0,关闭SPI2,会执行状态机复位/FIFO重置等操作
return RxData; //返回收到的数据
}
时序图:
void EXTI0_IRQHandler(void)
{
static u8 led0sta=1;
EXTI_D1->PR1=1<<0; //清除LINE0上的中断标志位
ADS1675_CS(0);
ads1675_data=SPI2_ReadByte();
ADS1675_CS(1);
}
在主程序中实时查看SPI2->CFG1,SPI2->CFG2。设置也没问题。
|
-
-
|