电路图
SPI信号线一般不用加上拉。
CubeMX配置
注意配置数据位数16,CLK空闲是1,CPOL=1.在第一个边沿输出数据,CPHA=1.
代码
直接根据16位寄存器格式发送给芯片即可。
HAL库的SPI操作16位数据,和8位一样直接发送就没问题,输出数据经测试正常,无需强制转换。强制uint8_t *转换之后,用逻辑分析仪观察SPI发送的数据有问题。
.c文件:
//0~3.3
void DAC7311_Vout(float Vout)
{
uint16_t Dat;
Dat = Vout*4096/3.3;
Dat= Dat << 2; //左移动两位,最低2位空
Dat &= 0X3FFF; //最高位设置00 正常设置
DAC7331_CS_H();
DAC7331_CS_L();
HAL_SPI_Transmit(&hspi1,&Dat,1,0xffff); //直接发送1次,忽略警告
DAC7331_CS_H();
HAL_Delay(1);
}
.h
#ifndef __DAC7311_H
#define __DAC7311_H
#include "spi.h"
#include "main.h"
#define DAC7331_CS_H() do{HAL_GPIO_WritePin(DAC7311_CS_GPIO_Port, DAC7311_CS_Pin,GPIO_PIN_SET);}while(0)
#define DAC7331_CS_L() do{HAL_GPIO_WritePin(DAC7311_CS_GPIO_Port, DAC7311_CS_Pin,GPIO_PIN_RESET);}while(0)
void DAC7311_Vout(float Vout);
#endif