|
在EX027 触摸屏的例程上 操作触摸芯片的时候 我发现有两个问题 可以解析下吗?
1. SPI口的初始化,MISO 为什么也初始化为推免复用输出呢? 复用脚的输入这么设置成输出了呢?、
例程的配置如下、
/* 配置 PA5、PA6、PA7 为复用推挽输出,用于 SCK, MISO and MOSI */ (miso为什么不配置成输入模式呢)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
2. 还有一个问题就是,在读触摸屏ADC的函数的时候, 读出来 应该是一个16位的数,因为低四位为0, 为什么只是向右移动三位呢?应该是移4位的啊?
例程的函数如下
static uint16_t TSC2046_ReadAdc(uint8_t _ucCh)
{
uint16_t usAdc;
TSC2046_CS_0(); /* 使能TS2046的片选 */
/*
TSC2046 控制字(8Bit)
Bit7 = S 起始位,必须是1
Bit6:4 = A2-A0 模拟输入通道选择A2-A0; 共有6个通道。
Bit3 = MODE ADC位数选择,0 表示12Bit;1表示8Bit
Bit2 = SER/DFR 模拟输入形式, 1表示单端输入;0表示差分输入
Bit1:0 = PD1-PD0 掉电模式选择位
*/
SPI_ShiftByte((1 << 7) | (_ucCh << 4)); /* 选择通道1, 测量X位置 */
/* 读ADC结果, 12位ADC值的高位先传,前12bit有效,最后4bit填0 */
usAdc = SPI_ShiftByte(0x00); /* 发送的0x00可以为任意值,无意义 */
usAdc <<= 8;
usAdc += SPI_ShiftByte(0x00); /* 获得12位的ADC采样值 */
usAdc >>= 3; /* 右移3位,保留12位有效数字 */ (这里为什么是3呢)
TSC2046_CS_1(); /* 禁能片选 */
return (usAdc);
} |
|