内容
要点
MS5837-30BA压力传感器是新一代的高分辨率I²C接口压力传感器,MS5837-30BA压力传感器是高精度水深测量的理想选择,水深测量分辨率高达2mm。MS5837-30BA压力传感器模块包括高线性度的压力传感元件和超低功耗的24位ΔΣADC,内置工厂校准系数。MS5837-30BA压力传感器A提供高精度的24位压力和温度数字输出,客户可以根据应用需要配置转换速度和功耗。高分辨率的温度输出可以同时实现温度计的功能。MS5837-30BA压力传感器可以与所有形式的微控器配合,通讯协议非常简单,无需修改内部寄存器。防水胶和防磁不锈钢圈使得传感器可以用于100米防水的运动表。这款新传感器模块基于先进的MEMS技术,并受益于MEAS过去十几年来在研发和批量生产气压/高度计方面的经验。
内容实现
上位机显示在timebase.c中找到TIMx_Configuration函数,通过修改TIM_TimeBaseStructure.TIM_Period的值来控制中断时间
void TIMx_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 开启TIMx_CLK,x[6,7],即内部时钟CK_INT=72M
macTIM_APBxClock_FUN (macTIM_CLK, ENABLE);
// 自动重装载寄存器周的值(计数值)
TIM_TimeBaseStructure.TIM_Period=50000;
// 累计 TIM_Period个频率后产生一个更新或者中断
// 时钟预分频数为71,则驱动计数器的时钟CK_CNT = CK_INT / (71+1)=1M
TIM_TimeBaseStructure.TIM_Prescaler= 719;
// 初始化定时器TIMx, x[6,7]
TIM_TimeBaseInit(macTIMbasex, &TIM_TimeBaseStructure);
// 清除计数器中断标志位
TIM_ClearFlag(macTIMbasex, TIM_FLAG_Update);
// 开启计数器中断
TIM_ITConfig(macTIMbasex,TIM_IT_Update,ENABLE);
// 使能计数器
TIM_Cmd(macTIMbasex, ENABLE);
// 暂时关闭TIMx,x[6,7]的时钟,等待使用
macTIM_APBxClock_FUN (macTIM_CLK, DISABLE);
}
在stm32f10x_it.c中可=可以找到该中断服务函数
void macTIM_INT_FUN (void)
{
if(TIM_GetFlagStatus(macTIMbasex ,TIM_FLAG_Update)==SET)
{
MS5837_Read();
TIM_ClearITPendingBit(macTIMbasex,TIM_FLAG_Update);
}
}
在MS5837_Read函数中将算出的值通过重定向函数fputc将printf发往串口1
void MS5837_Read(void)
{
MS5837_Getdata();
MS5837_Calculate();
MS5837.temp=MS5837_temperature();
MS5837.depth=MS5837_depth()-MS5837.offset;
MS5837.pressure=MS5837_pressure(Pa);
printf("temp=%f;\t",MS5837.temp);//温度
printf("depth=%f;\t",MS5837.depth);//深度
printf("pressure=%f;\t",MS5837.pressure);//压强
printf("offset=%f;\t",MS5837.offset);//水深修正值
printf("\n");
}