STM32 HAL 硬件SPI XPT2046

初次尝试请不要使用过高的速率

 

 严格按照发送8bit命令,再接收16bit或2次8bit数据来进行,不要有多余的操作,否则数据紊乱。

每次转换必须在开始后(接收到 start)的 1.6mS 内 完成,否则输入采样保持电路取样的信号会逐渐被放电衰减,影响转换结果。

#include <stdlib.h>
//两个接口函数
void send_8way(uint8_t data)
{
    HAL_SPI_Transmit(spi_, &data, 1, 1000); //不配置硬件片选(NSS)功能,手动片选
}

uint8_t receiv_8way(void)
{
    uint8_t data;
    HAL_SPI_Receive(spi_, &data, 1, 1000);
    return data;
}

int cmp(const void *a, const void *b)
{
    return *(uint16_t *)a - *(uint16_t *)b; //从小到大排序(b-a则是从大到小)。需要与被测类型一致,否则排序乱七八糟
}

static const uint8_t count = 9; //采集次数
uint16_t x_data[count], y_data[count];
void XPT2046_Rd_Addata(void)
{
    cs2_0(); //片选

    for (uint8_t i = 0; i < count; i++)
    {
        send_8way(0xd0); //发送命令
        x = receiv_8way();
        x <<= 8;
        x |= receiv_8way();
        x >>= 4;
        x_data[i] = x;

        send_8way(0x90);

        y = receiv_8way();
        y <<= 8;
        y |= receiv_8way();
        y >>= 4;
        y_data[i] = y;
    }
    qsort(x_data, count, sizeof(x_data[0]), cmp); //stdlib.h里的排序函数
    qsort(y_data, count, sizeof(y_data[0]), cmp);
    x = x_data[count >> 1]; //取中间值
    y = y_data[count >> 1];
    cs2_1();
}

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值