内容

学习使用深度传感器MS5837

要点

MS5837-30BA压力传感器是新一代的高分辨率I²C接口压力传感器,MS5837-30BA压力传感器是高精度水深测量的理想选择,水深测量分辨率高达2mm。MS5837-30BA压力传感器模块包括高线性度的压力传感元件和超低功耗的24位ΔΣADC,内置工厂校准系数。MS5837-30BA压力传感器A提供高精度的24位压力和温度数字输出,客户可以根据应用需要配置转换速度和功耗。高分辨率的温度输出可以同时实现温度计的功能。MS5837-30BA压力传感器可以与所有形式的微控器配合,通讯协议非常简单,无需修改内部寄存器。防水胶和防磁不锈钢圈使得传感器可以用于100米防水的运动表。这款新传感器模块基于先进的MEMS技术,并受益于MEAS过去十几年来在研发和批量生产气压/高度计方面的经验。

内容实现

上位机显示
屏幕截图 2021-10-02 204350.png在timebase.c中找到TIMx_Configuration函数,通过修改TIM_TimeBaseStructure.TIM_Period的值来控制中断时间

  1. void TIMx_Configuration(void)
  2. {
  3. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  4. // 开启TIMx_CLK,x[6,7],即内部时钟CK_INT=72M
  5. macTIM_APBxClock_FUN (macTIM_CLK, ENABLE);
  6. // 自动重装载寄存器周的值(计数值)
  7. TIM_TimeBaseStructure.TIM_Period=50000;
  8. // 累计 TIM_Period个频率后产生一个更新或者中断
  9. // 时钟预分频数为71,则驱动计数器的时钟CK_CNT = CK_INT / (71+1)=1M
  10. TIM_TimeBaseStructure.TIM_Prescaler= 719;
  11. // 初始化定时器TIMx, x[6,7]
  12. TIM_TimeBaseInit(macTIMbasex, &TIM_TimeBaseStructure);
  13. // 清除计数器中断标志位
  14. TIM_ClearFlag(macTIMbasex, TIM_FLAG_Update);
  15. // 开启计数器中断
  16. TIM_ITConfig(macTIMbasex,TIM_IT_Update,ENABLE);
  17. // 使能计数器
  18. TIM_Cmd(macTIMbasex, ENABLE);
  19. // 暂时关闭TIMx,x[6,7]的时钟,等待使用
  20. macTIM_APBxClock_FUN (macTIM_CLK, DISABLE);
  21. }

在stm32f10x_it.c中可=可以找到该中断服务函数

  1. void macTIM_INT_FUN (void)
  2. {
  3. if(TIM_GetFlagStatus(macTIMbasex ,TIM_FLAG_Update)==SET)
  4. {
  5. MS5837_Read();
  6. TIM_ClearITPendingBit(macTIMbasex,TIM_FLAG_Update);
  7. }
  8. }

在MS5837_Read函数中将算出的值通过重定向函数fputc将printf发往串口1

  1. void MS5837_Read(void)
  2. {
  3. MS5837_Getdata();
  4. MS5837_Calculate();
  5. MS5837.temp=MS5837_temperature();
  6. MS5837.depth=MS5837_depth()-MS5837.offset;
  7. MS5837.pressure=MS5837_pressure(Pa);
  8. printf("temp=%f;\t",MS5837.temp);//温度
  9. printf("depth=%f;\t",MS5837.depth);//深度
  10. printf("pressure=%f;\t",MS5837.pressure);//压强
  11. printf("offset=%f;\t",MS5837.offset);//水深修正值
  12. printf("\n");
  13. }