学前班
最后登录1970-1-1
在线时间 小时
注册时间2015-6-30
|
楼主 |
发表于 2015-7-1 09:39:14
|
显示全部楼层
/*
*********************************************************************************************************
*
* 模块名称 : 主程序模块。
* 文件名称 : main.c
* 版 本 : V1.0
* 说 明 : systick实现软件延迟和定时器例程。
* 修改记录 :
*
*********************************************************************************************************
*/
#include "stm32f10x.h" /* 如果要用ST的固件库,必须包含这个文件 */
#include <stdio.h> /* 因为用到了printf函数,所以必须包含这个文件 */
#include "bsp.h" /* 底层硬件驱动 */
#include "LCD/LCD.h"
#include "string.h"
/* 定义例程名和例程发布日期 */
#define EXAMPLE_NAME "STM32F103VE+ADS1256例程"
#define EXAMPLE_DATE "2014-03-08"
#define DEMO_VER "1.0"
static char LcdViewBuff[128];
/* 仅允许本文件内调用的函数声明 */
static void PrintfLogo(void);
static void PrintfHardInfo(void);
/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: c程序入口
* 形 参:无
* 返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{
int32_t adc[8];
int32_t volt[8];
uint8_t i;
uint8_t ch_num;
/*
由于ST固件库的启动文件已经执行了CPU系统时钟的初始化,所以不必再次重复配置系统时钟。
启动文件配置了CPU主时钟频率、内部Flash访问速度和可选的外部SRAM FSMC初始化。
系统时钟缺省配置为72MHz,如果需要更改,可以修改:
\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
中配置系统时钟的宏。
*/
bsp_Init();
PrintfLogo(); /* 打印例程Logo到串口1 */
PrintfHardInfo(); /* 打印硬件接线信息 */
bsp_DelayMS(100); /* 等待上电稳定,等基准电压电路稳定, bsp_InitADS1256() 内部会进行自校准 */
bsp_InitADS1256(); /* 初始化配置ADS1256. PGA=1, DRATE=30KSPS, BUFEN=1, 输入正负5V */
LCD_Initializtion(); //LCD初始化
/* 打印芯片ID (通过读ID可以判断硬件接口是否正常) , 正常时状态寄存器的高4bit = 3 */
{
uint8_t id;
id = ADS1256_ReadChipID();
printf("\r\n");
printf("读取芯片ID\r\n");
if (id != 3)
{
printf("Error, ASD1256 Chip ID = 0x%X\r\n", id);
}
else
{
printf("Ok, ASD1256 Chip ID = 0x%X\r\n", id);
}
}
/* 设置PGA增益,数据更新速率 */
#if 1
printf("\r\nPGA增益 = 1, 数据输出速率 = 15sps, 单端8路扫描\r\n\r\n");
ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS); /* 配置ADC参数: 增益1:1, 数据输出速率 15Hz */
/*
中断服务程序会自动读取ADC结果保存在全局变量,主程序通过 ADS1256_GetAdc() 函数来读取这些数据
*/
ADS1256_StartScan(0); /* 启动中断扫描模式. 0表示单端8路,1表示差分4路 */
ch_num = 8; /* 通道数 = 8 或者4 */
#else
printf("\r\nPGA增益 = 1, 数据输出速率 = 15sps, 差分4路扫描\r\n\r\n");
ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS); /* 配置ADC参数: 增益1:1, 数据输出速率 15Hz */
/*
中断服务程序会自动读取ADC结果保存在全局变量,主程序通过 ADS1256_GetAdc() 函数来读取这些数据
*/
ADS1256_StartScan(1); /* 启动中断扫描模式. 0表示单端8路,1表示差分4路 */
ch_num = 4; /* 通道数 = 8 或者4 */
#endif
while (1)
{
LCD_Clear(White);
GUI_Text(44,10,"YuanKeTech",Black,White); //传输到LCD屏幕上
bsp_Idle(); /* 空闲时执行的函数,比如喂狗. 在bsp.c中 */
for (i = 0; i < ch_num; i++)
{
/* 从全局缓冲区读取采样结果。 采样结果是在中断服务程序中读取的。*/
adc = ADS1256_GetAdc(i);
/* 4194303 = 2.5V , 这是理论值,实际可以根据2.5V基准的实际值进行公式矫正 */
volt = ((int64_t)adc * 2500000) / 4194303; /* 计算实际电压值(近似估算的),如需准确,请进行校准 */
}
/* 打印采集数据 */
{
int32_t iTemp;
//清空LCD显示缓冲区
memset(LcdViewBuff,0,128);
for (i = 0; i < ch_num; i++)
{
iTemp = volt; /* 余数,uV */
if (iTemp < 0)
{
iTemp = -iTemp;
sprintf(LcdViewBuff,"%d=%6d,(-%d.%03d %03d V) ", i, adc, iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000);
}
else
{
sprintf(LcdViewBuff,"%d=%6d,( %d.%03d %03d V) ", i, adc, iTemp/1000000, (iTemp%1000000)/1000, iTemp%1000);
}
GUI_Text(44,(10+i*40),LcdViewBuff,Black,White); //传输到LCD屏幕上
}
printf("\33[%dA", ch_num);
}
bsp_DelayMS(300); /* 每隔300ms 输出一次数据 */
}
}
/*
*********************************************************************************************************
* 函 数 名: PrintfHardInfo
* 功能说明: 打印硬件接线信息
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void PrintfHardInfo(void)
{
printf("接线方法: \r\n");
printf("ADS1256模块 STM32-X2开发板(STM32F103VE)\r\n");
printf(" +5V <------ 5.0V 5V供电\r\n");
printf(" GND ------- GND 地\r\n");
printf(" DRDY ------> PB3 准备就绪\r\n");
printf(" CS <------ PB2 SPI_CS\r\n");
printf(" DIN <------ PB15 SPI_MOSI\r\n");
printf(" DOUT ------> PB14 SPI_MISO\r\n");
printf(" SCLK <------ PB13 SPI时钟\r\n");
printf(" GND ------- GND 地\r\n");
printf(" PDWN <------ 不接 掉电控制\r\n");
printf(" RST <------ 不接 复位信号\r\n");
}
/*
*********************************************************************************************************
* 函 数 名: PrintfLogo
* 功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的超级终端软件可以观察结果
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void PrintfLogo(void)
{
printf("\33[2J"); /* 清屏 */
printf("*************************************************************\n\r");
printf("* 例程名称 : %s\r\n", EXAMPLE_NAME); /* 打印例程名称 */
printf("* 例程版本 : %s\r\n", DEMO_VER); /* 打印例程版本 */
printf("* 发布日期 : %s\r\n", EXAMPLE_DATE); /* 打印例程日期 */
/* 打印ST固件库版本,这3个定义宏在stm32f10x.h文件中 */
printf("* 固件库版本 : %d.%d.%d\r\n", __STM32F10X_STDPERIPH_VERSION_MAIN,
__STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);
printf("* \n\r"); /* 打印一行空格 */
printf("* QQ : 6528760 \r\n");
printf("* Email : 6528760@qq.com \r\n");
printf("* Copyright www.yuankeceth.com 远科智能\r\n");
printf("*************************************************************\n\r");
}
|
|