Microcontroller 如何使用SPI总线对压力传感器进行编程

Microcontroller 如何使用SPI总线对压力传感器进行编程,microcontroller,stm32,spi,lora,Microcontroller,Stm32,Spi,Lora,我使用STM32微控制器作为LoRa节点MB1296D的一部分。我想将压力传感器MS5803连接到LoRa节点,并通过SPI总线对传感器进行编程。基本上,这对我来说都是很新的,这就是为什么我会查找 我正在试图理解此代码,出现了几个问题: 一开始定义的宏,它们的用途是什么,以及所用微控制器固有的十六进制数是什么如果我要从头开始编写代码,我想首先应该为对应于SPI_SCK、SPI_MISO和SPI_MOSI的GPIO引脚定义宏 函数unsigned long cmd_adcchar cmd包含一个s

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

我正在试图理解此代码,出现了几个问题:

一开始定义的宏,它们的用途是什么,以及所用微控制器固有的十六进制数是什么如果我要从头开始编写代码,我想首先应该为对应于SPI_SCK、SPI_MISO和SPI_MOSI的GPIO引脚定义宏 函数unsigned long cmd_adcchar cmd包含一个switch命令,我完全不知道它是做什么的。我的意思是,在我看来,似乎我正在尝试设置ADC的分辨率,但我如何知道相应的延迟,以及为什么开关命令包含0x0f?
所以。如果你能抽出时间给我一个有用的答案,那就太好了!另外,如果你知道任何关于这个主题的好读物,请告诉我!我正试图在几乎没有时间的情况下解决这个问题

您的问题是基本的C编程问题,并不是这个压力传感器或示例的具体问题

宏是用十六进制数定义的,以明确这些值表示位字段。嵌入式软件开发人员很容易将十六进制转换为二进制。阅读传感器数据表中的寄存器说明。十六进制值中设置的位将对应于传感器寄存器描述中的有意义位


开关cmd&0x0f执行cmd与0x0f的按位AND运算。十六进制值0x0f设置了四个最低有效位。因此,代码忽略了cmd的四个最高有效位,即屏蔽或归零cmd值的四个最低有效位。

与其直接跳入示例代码的大球中,我建议研究零件的数据表,了解其接受的命令及其响应方式。当您了解部件的协议如何运行时,任何代码都会更有意义,并且您将能够更好地根据您的需求定制操作。仅仅因为你的时间很短并不意味着打示例代码是最快的途径。如果你从来没有做过SPI或I2C,特别是如果你没有多通道示波器,那么你将在尝试使用与外设对话的罐装库时遇到更多困难。如果你把协议搞砸了,这很容易,你至少可以在没有更多可见性的情况下对状态变化有更多的控制,并且有一些机会。任何时候,当你使用一个硬件外围设备为你工作时,你真的需要一个示波器,或者需要将信号降低到人的速度,并且…有一些LED灯闪烁。你仍然需要阅读你要与之交谈的部分的数据表,这样你就可以建立通信所需的波形,芯片选择,时钟,mosi主输出从输入从输出,有时somi,有时只是D2或类似的名称。I2c甚至更糟糕,因为您有一条双向数据线,也可以使用spi,但并不常见