欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32的SPI接口應用問題?無法驅動XPT2046
[打印本頁]
作者:
遠征之路
時間:
2018-9-25 17:32
標題:
STM32的SPI接口應用問題?無法驅動XPT2046
各位大神:
如題,本人使用STM32F103的SPI2 想驅動XPT2046(使用這個芯片的ADC功能),但是在SPI2配置與硬件接線均沒有問題的情況下,結果依然無法驅動,自認為是最終MY_FINAL()轉換函數出現了問題,但不知道問題在哪里?
另外有幾點疑惑,還請各位大神幫忙看看:
1、既然使用了STM32的SPI2 接口,那么在編程時需要使用時鐘嗎?如下 u16 MY_FINAL(u8 cha) 函數
2、各位是否有類似的程序,讓小弟借鑒借鑒,謝謝
#include "stm32f10x.h"
#include "led.h"
#include "xpt.h"
#include "delay.h"
#include "my_spi.h"
#define MY_CHANNEL 0xA4 //XPT2046通道一的控制寄存器
//AD_XPT2046轉換功能函數
u16 MY_FINAL(u8 cha)
{
u16 MY_VAL=0;
MY_SCLK=0;
MY_CS=0; //選中XPT2046
SPI2_ReadWriteByte(cha);
// SPI2_ReadWriteByte(0x00);
// SPI2_ReadWriteByte(0x00);
// SPI2_ReadWriteByte(0x00);
delay_us(6);
MY_SCLK=1;
delay_us(1);
MY_SCLK=0;
MY_VAL |= SPI2_ReadWriteByte( 0xff ) << 8 ; //按照一個字節由高位到低位進行傳送,所以先轉換完畢的高8位需要左移
MY_VAL |= SPI2_ReadWriteByte(0xff); //后8位直接與之前的值相或
MY_VAL >>= 4 ; //只有高12位有效,所以右移4位
// AD_XPT_WRITE(cha);
//
// delay_us(6);//ADS7846和xpt2046效果一致;轉換時間最長為6us
//
// delay_us(1);//delays 1us equals _nop_()
//
// MY_VAL = AD_XPT_READ();
MY_CS=1;
return MY_VAL;
}
//main()函數
int main(void)
{
u16 YOYO_VAL;
delay_init();
LED_MY_Init();
AD_XPT_Init_MY(); //已經包含了SPI2 的初始化
SPI2_Init();
while(1)
{
YOYO_VAL = MY_FINAL(MY_CHANNEL);
if(YOYO_VAL>10) //當AD采集的等效值大于10時,LED被點亮
{
LED_YE = 0;
}
else LED_YE = 1;
}
}
復制代碼
作者:
hange_v
時間:
2018-9-25 20:08
static void gpioInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_3);
}
static void spiInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);
//PA4->CS
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PA5->SCK,PA6->MISO,PA7->MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_SSOutputCmd(SPI1, ENABLE);
SPI_Cmd(SPI1, ENABLE);
}
static void spiEN(void)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
}
static void spiDIS(void)
{
GPIO_SetBits(GPIOA, GPIO_Pin_4);
}
static void spiWriteByte(u8 TxData)
{
while((SPI1->SR & SPI_I2S_FLAG_TXE) == 0); //等待發送區空
SPI1->DR = TxData; //發送一個byte
while((SPI1->SR & SPI_I2S_FLAG_RXNE) == 0); //等待接收完一個byte
SPI1->DR;
}
static u8 spiReadByte(void)
{
while((SPI1->SR & SPI_I2S_FLAG_TXE) == 0); //等待發送區空
SPI1->DR = 0xFF; //發送一個空數據產生輸入數據的時鐘
while((SPI1->SR & SPI_I2S_FLAG_RXNE) == 0); //等待接收完一個byte
return SPI1->DR;
}
作者:
洲51hei
時間:
2018-9-25 21:15
一般是時序出了問題,最好買一個邏輯分析儀監視一下數據,便宜的分析儀幾十元人民幣,某寶上就有這種分析儀
作者:
洲51hei
時間:
2018-9-25 21:18
一般是程序時序有問題,到某寶上買一個數據邏輯分析儀,幾十元人民幣,測一下數據就知道你錯在哪里了。
作者:
遠征之路
時間:
2018-9-26 12:17
hange_v 發表于 2018-9-25 20:08
static void gpioInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
大神,XPT2046驅動具體完整時序有嗎?另外,既然使用了STM32的SPI2 接口,那么在編程時(即編寫XPT2046完整驅動程序)時需要使用時鐘嗎? 謝謝
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1