硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6848|回复: 2
收起左侧

[有问必答] STM32开发板的例程问题

[复制链接]

15

主题

34

回帖

79

积分

初级会员

积分
79
发表于 2012-9-18 08:51:25 | 显示全部楼层 |阅读模式
在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);
}            
回复

使用道具 举报

760

主题

1052

回帖

3337

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3337
发表于 2012-9-18 19:29:24 | 显示全部楼层
MISO 需要设置为复用功能; 没有复用输入选项的。

右移3位是由TS2046数据寄存器的对齐方式决定的,你看下 TSC2046的数据寄存器说明。
回复

使用道具 举报

15

主题

34

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2012-9-19 08:48:42 | 显示全部楼层
看看先罗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 20:02 , Processed in 0.048067 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表