HT7512A在HC32A4A0单片机上应用

一、简述

         HT7512A是一款低功耗、轨到轨输出、12位串行输入数模转换器芯片,它与DAC7512完全兼容。在STM32单片机上的应用,网上可以找到很多例子,就不再赘述了,这里特别讲一下在HC32A4A0单片机上的应用,大致与在STM32单片机上的应用差不多,这里讲一下注意点。

二、SPI配置

        根据芯片手册,可以知道,我们需要通过SPI向HT7512A写0~4095的值,芯片对应输出0~5V电压,因为我们只需要写数据,所以只需要配置CS/CLK/MOSI三根线即可,配置如下:

/* SPI引脚配置 */
static void SPI_Config(void)
{
    stc_gpio_init_t stcGpioInit;

    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(SPI_SCK_PORT, SPI_SCK_PIN, &stcGpioInit);

    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(SPI_MOSI_PORT, SPI_MOSI_PIN, &stcGpioInit);
    GPIO_SetDebugPort(GPIO_PIN_TRST, DISABLE);

    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(SPI_SS0_PORT, SPI_SS0_PIN, &stcGpioInit);
}

注意:

1. MOSI引脚PB4是特殊引脚,它默认NJTRST功能,因此想使用GPIO功能,必须将其失能

 GPIO_SetDebugPort(GPIO_PIN_TRST, DISABLE);

这就是加上这一句的原因,这点注意就行了!

2. SPI2片选CS的PA13也是特殊引脚,它默认SWDIO功能,如果使用这个引脚进行片选,那么势必会与SWDIO冲突,将其复用为GPIO功能,会导致单片机无法使用SWDIO方式烧录,硬件设计时注意避免这种情况。

三、SPI时序

        首先,HT7512A与单片机是通过SPI进行通讯的,下面看一下芯片手册上的SPI写数据的时序:

我才用的是GPIO模拟SPI写的时序,代码如下:

PS:如果对SPI时序有疑问的,可以详细了解SPI读写时序,这里不再仔细说明。

/* SPI写数据 a输入范围:0~4095 */
void HT7512A_SendData(uint16_t a)
{
    int i;

    SPI_CS_1;
    SPI_CLK_1;
    SPI_DATA_1;
    DDL_DelayUS(1);
    SPI_CS_0;
    DDL_DelayUS(1);
    for (i = 0; i < 16; i++) {
        if (0x8000 & a) {
            SPI_DATA_1;
        } else {
            SPI_DATA_0;
        }
        DDL_DelayUS(1);
        SPI_CLK_0;
        a = a << 1;
        DDL_DelayUS(1);
        SPI_CLK_1;
    }
    SPI_CS_1;
    SPI_CLK_1;
    SPI_DATA_1;
}

上面我们提到,我们的目的是让HT7512输出0~5V的电压值,如果精确到0.1V,将输入值扩大10倍进行如下处理即可:

/* value输入范围:0~50 */
void HT7512A_Send_Data(uint8_t value)
{
    uint16_t data;
    uint8_t temp;

    temp = value % 10;
    value = value / 10;
    data = ((4095 * value) / 5) + (temp * 82);

    HT7512A_SendData(data);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值