Я пытаюсь скомпилировать пример, включенный в библиотеку LoRaFi, для использования с радиошляпой SX1272 LoRa и комплектом STM32 IoT Node Discovery. Это проект STM32duino.
Ошибка конкретно указывает на заголовок устройства IoT Node, включенный в пакет STM32core.
C:\Users\monou\Documents\ArduinoData\packages\STM32\hardware\stm32\1.9.0\system/Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l475xx.h:1397:43: error: expected ')' before '*' token
1397 | #define CRC ((CRC_TypeDef *) CRC_BASE)
| ~ ^
C:\Users\monou\Documents\Arduino\libraries\LoRaFi\src/LoRaFi.h:122:8: note: in expansion of macro 'CRC'
122 | void CRC(uint8_t crc = ON);
| ^~~
Эта ошибка не имеет для меня никакого смысла, поскольку структура CRC_TypeDef четко определена в самом заголовке.
typedef struct
{
__IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */
__IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */
uint8_t RESERVED0; /*!< Reserved, 0x05 */
uint16_t RESERVED1; /*!< Reserved, 0x06 */
__IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */
uint32_t RESERVED2; /*!< Reserved, 0x0C */
__IO uint32_t INIT; /*!< Initial CRC value register, Address offset: 0x10 */
__IO uint32_t POL; /*!< CRC polynomial register, Address offset: 0x14 */
} CRC_TypeDef;
, за которым следует собственное определение CR C
#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE)
#define CRC ((CRC_TypeDef *) CRC_BASE)
#define TSC ((TSC_TypeDef *) TSC_BASE)
Радиомодуль LoRa требует, чтобы CR C быть включен, поэтому я не могу просто закомментировать оскорбительный код в LoRaFi.h. Понятия не имею, как это исправить. CRC_TypeDef определен правильно, CR C также должен быть определен.
Любая помощь будет принята с благодарностью.
В случае, если это поможет, вот пример, предоставленный LoRaFi. Стоит отметить, что эта ошибка возникает во всех приведенных примерах, а не только в этом.
// LoRaFi receiving data using interrupt
#include <LoRaFi.h>
//creat object to call functions of LoRaFi library
LoRaFi LoRaFi;
const int messageLength = 11;
char message[messageLength];
void setup() {
//initialize serial communication
Serial.begin(9600);
delay(100);
//initialize LoRa module
LoRaFi.begin();
delay(100);
// activate the interrupt on LoRaFi receiving
LoRaFi.ReceivingInterrupt(receiveMessage);
}
void loop() {
//Just waiting the interrupt and do nothing
delay(1000);
}
//callback function to receve the temperature and humidity using interrupt routine
void receiveMessage()
{
Serial.print("Received Message: ");
//Receive message
LoRaFi.ReceivePackage(message,messageLength);
//Print received message
int i;
for(i=0; i<messageLength; i++)
{
Serial.print(message[i]);
}
Serial.println();
}