如何使用SPI总线编程压力传感器

时间:2018-05-03 15:11:56

标签: microcontroller stm32 spi lora

我正在使用STM32微控制器(作为LoRa节点MB1296D的一部分)。我想将压力传感器(MS5803)连接到LoRa节点,并通过SPI总线对传感器进行编程。基本上,这对我来说都是全新的,这就是我查找example code

的原因

我正在尝试理解这段代码,并提出了几个问题:

  • 最初定义的宏,它们的目的究竟是什么,是使用过的微控制器固有的十六进制数? - 如果我是从头开始编写代码,我想我将首先定义与SPI_SCK,SPI_MISO和SPI_MOSI对应的GPIO引脚的宏
  • 函数unsigned long cmd_adc(char cmd)包含一个switch命令,我完全不知道它是什么。我的意思是它看起来好像我正试图设置ADC的分辨率,但我怎么知道相应的延迟以及为什么switch命令包含0x0f?

因此。如果你能找到一些时间给我一个有用的答案,那就太棒了!另外,如果你知道任何特别关注这个主题的好读物,请告诉我!我试图用很少的时间来解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的问题是基本的C编程问题,并不是真正针对此压力传感器或示例。

宏用十六进制数定义,以清楚表明值代表位字段。将十六进制转换为二进制非常容易(嵌入式软件开发人员的第二天性)。阅读传感器数据表中的寄存器说明。以十六进制值设置的位将对应于传感器寄存器描述中的有意义位。

switch (cmd & 0x0f)执行cmd0x0f的按位AND。十六进制值0x0f具有四个最低有效位。因此,代码忽略(即屏蔽或清零)cmd的四个最高有效位,并仅考虑cmd值的四个最低有效位。