本文目录一览:
- 1、stm32与AD7190通信,程序不能读到值
- 2、XPT2046能用STM32硬件SPI直接驱动不? 如果能,波特率预分频值应设为多少? 大侠请帮忙
- 3、STM32单片机SPI问题
- 4、stm32cubemx的硬件spi无法拉高软件片选
- 5、请教STM32系列SPI接口的应用问题?
- 6、用STM32的SPI接口驱动2.2寸的TFT,怎么提高刷屏速度
stm32与AD7190通信,程序不能读到值
这个问题需要有实物调试,
原因可能有很多,硬件,软件方面。
思路是:
先排除硬件问题,用这个SPI通道测试一下其他通讯
再仔细对照一下AD7190的规格书,看看初始化,设置是否正确,
然后再检查一下发送接收的过程和步骤是否正确。
整理一下代码:
void SPI_Init(void)
{
RCC-APB2ENR|=13; //PB的时钟使能
RCC-APB1ENR|=114; //SPI2时钟使能
GPIOB-CRH=0X000F0FFF; //PB11 PB13 PB15复用推挽 PB14浮空输入
GPIOB-CRH|=0XB4B0B000;
GPIOB-ODR|=111; //上拉
GPIOB-ODR|=113;
GPIOB-ODR|=115;
SPI2-CR1|=010; //全双工
SPI2-CR1|=19; //软件SSM,NSS引脚的电平由SSI位的值决定
SPI2-CR1|=18; //SSI位
SPI2-CR1|=12; //配置为主设备
SPI2-CR1|=011; //使用8位数据格式
SPI2-CR1|=11; //空闲状态sck=1保持高电平
SPI2-CR1|=10; //数据采样从第二个时钟边沿开始
SPI2-CR1|=33; //fsck=36M/16 波特率控制
SPI2-CR1|=07; //先发送MSB
SPI2-CR1|=16; //使能spi设备
}
void SPI2_Send_ReveiceFull(u8 *data,u8 len)
{
CS=0;
for(i=0;ilen;i++)
{
while((SPI2-SR(11))==0); //检查spi标志位设置与否,发送缓存空标志位TXE=1为空跳出
SPI2-DR=*(data+i);
while((SPI2-SR(10))==0); //检查指定spi标志位设置与否,接受缓存非空标志位RXNE为非空跳出
temp=SPI2-DR;
*(AD7190_ReveiceData+len-i-1)=temp;
}
CS=1;
}
void AD7190_Init(void)
{
//复位
AD7190_SendaData[2]=0xff;
AD7190_SendaData[1]=0xff;
AD7190_SendaData[0]=0xff;
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//设置配置寄存器
AD7190_SendaData[0]=0x10;
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
AD7190_SendaData[2]=0x10; //基准电压选择需确定
AD7190_SendaData[1]=0x03; //通道选择需配置
AD7190_SendaData[0]=0x07; //输入范围
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//设置模式寄存器
AD7190_SendaData[0]=0x08;
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
AD7190_SendaData[2]=0x10; //使用外部时钟
AD7190_SendaData[1]=0x03;
AD7190_SendaData[0]=0xff;
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//读模式
for(i=0;i4;i++)AD7190_SendaData[i]=0x00;
AD7190_SendaData[0]=0x48;
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
AD7190_SendaData[0]=0x00;
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//读配置寄存器
AD7190_SendaData[0]=0x50;
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//读数据寄存器
AD7190_SendaData[0]=0x5C; //5C
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
AD7190_SendaData[0]=0xff;
}
XPT2046能用STM32硬件SPI直接驱动不? 如果能,波特率预分频值应设为多少? 大侠请帮忙
可以用硬件SPI方式的,至于波特率,正常72M主频下,设为16分频就可以
STM32单片机SPI问题
● MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
● MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
● SCK:串口时钟,作为主设备的输出,从设备的输入
●NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。从设备的NSS引脚可以由主设备的一个标准I/O引脚来驱动。一旦被使能(SSOE位),NSS引脚也可以作为输出引脚,并在SPI处于主模式时拉低;此时,所有的SPI设备,如果它们的NSS引脚连接到主设备的NSS引脚,则会检测到低电平,如果它们被设置为NSS硬件模式,就会自动进入从设备状态。当配置为主设备、NSS配置为输入引脚(MSTR=1,SSOE=0)时,如果NSS被拉低,则这个SPI设备进入主模式失败状态:即MSTR位被自动清除,此设备进入从模式。
stm32cubemx的硬件spi无法拉高软件片选
系统bug。stm32cubemx是一种初始化代码生成器工具,用户在使用时硬件spi无法拉高软件片选是系统bug成的,只需要关闭重新打开即可解决。
请教STM32系列SPI接口的应用问题?
SPI一主多从的片选信号引脚其实都不用STM32自带的硬件控制。配置的时候不用开NSS,另外随便选2个引脚(NSS脚也可选)配置下作为CS1和CS2。编程的时候时序上注意下,2个片选不能同时有效。
用STM32的SPI接口驱动2.2寸的TFT,怎么提高刷屏速度
SPI速率提高,如果已经提到最高,那就没办法了。
除非你是买带方案的液晶了。图片直接存到液晶的那种,直接一个指令刷屏。
你可以百度搜搜锐显科技,他们有这种屏。