STM32单片机(STM32F429)读写(8通道带PGA的24位ADC)ADS1256软件例程源码,可以做为你的学习设计参考。
int main(void)
{
uint8_t i;
bsp_Init();
PrintfLogo(); /* 打印例程Logo到串口1 */
bsp_DelayMS(100); /* 等待上电稳定,等基准电压电路稳定, bsp_InitADS1256() 内部会进行自校准 */
bsp_InitADS1256(); /* 初始化配置ADS1256. PGA=1, DRATE=30KSPS, BUFEN=1, 输入正负5V */
/* 打印芯片ID (通过读ID可以判断硬件接口是否正常) , 正常时状态寄存器的高4bit = 3 */
#if 0
{
uint8_t id;
id = ADS1256_ReadChipID();
if (id != 3)
{
printf("Error, ASD1256 Chip ID = 0x%X\r\n", id);
}
else
{
printf("Ok, ASD1256 Chip ID = 0x%X\r\n", id);
}
}
#endif
ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_30SPS); /* 配置ADC参数: 增益1:1, 数据输出速率 1KHz */
ADS1256_StartScan(); /* 启动中断扫描模式, 轮流采集8个通道的ADC数据. 通过 ADS1256_GetAdc() 函数来读取这些数据 */
while (1)
{
bsp_Idle(); /* 空闲时执行的函数,比如喂狗. 在bsp.c中 */
/* 打印采集数据 */
for (i = 0; i < 8; i++)
{
int32_t iTemp;
iTemp = ((int64_t)g_tADS1256.AdcNow[i] * 2500000) / 4194303; /* 计算实际电压值(近似估算的),如需准确,请进行校准 */
if (iTemp < 0)
{
iTemp = -iTemp;
printf("%d=%6d,(-%d.%03d %03d V) ", i, g_tADS1256.AdcNow[i], iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000);
}
else
{
printf("%d=%6d,( %d.%03d %03d V) ", i, g_tADS1256.AdcNow[i], iTemp/1000000, (iTemp%1000000)/1000, iTemp%1000);
}
}
printf("\r\n");
bsp_DelayMS(500); /* 每隔500ms 输出一次数据 */
}
}