初始化GD32L233CBT6串口,配置LoRa模块,其中M1、M0分别接PA11和PA12,RXD、TXD分别接PA10和PA9,AUX接PA8,现有两块相同的板子,设计程序实现这两个节点之间的无线数据传输,用微控制器的LED(接GD32引脚PC7)显示,亮则说明传输成功,不亮不成功,编写程序给出具体代码的LoRa、Usart头文件和源文件和主函数
时间: 2024-04-17 19:25:29 浏览: 137
好的,以下是根据你的需求给出的具体代码:
首先,我们创建 `lora.h` 头文件,其中包含了 LoRa 相关的函数声明和宏定义:
```c
#ifndef LORA_H
#define LORA_H
#include "gd32f10x.h"
#define LORA_UART USART0
#define LORA_UART_CLK RCU_USART0
#define LORA_UART_IRQn USART0_IRQn
#define LORA_UART_GPIO_PIN_TX GPIO_PIN_9
#define LORA_UART_GPIO_PIN_RX GPIO_PIN_10
#define LORA_UART_GPIO GPIOA
#define LORA_AUX_GPIO_PIN GPIO_PIN_8
#define LORA_AUX_GPIO GPIOA
void lora_init(void);
void lora_send_data(uint8_t* data, uint8_t len);
#endif /* LORA_H */
```
然后,我们创建 `lora.c` 源文件,其中实现了 LoRa 相关的函数:
```c
#include "lora.h"
void lora_init(void)
{
/* 串口初始化 */
rcu_periph_clock_enable(LORA_UART_CLK);
rcu_periph_clock_enable(RCU_AF);
gpio_init(LORA_UART_GPIO, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, LORA_UART_GPIO_PIN_TX);
gpio_init(LORA_UART_GPIO, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, LORA_UART_GPIO_PIN_RX);
usart_deinit(LORA_UART);
usart_baudrate_set(LORA_UART, 115200U);
usart_word_length_set(LORA_UART, USART_WL_8BIT);
usart_stop_bit_set(LORA_UART, USART_STB_1BIT);
usart_parity_config(LORA_UART, USART_PM_NONE);
usart_hardware_flow_rts_config(LORA_UART, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(LORA_UART, USART_CTS_DISABLE);
usart_receive_config(LORA_UART, USART_RECEIVE_ENABLE);
usart_transmit_config(LORA_UART, USART_TRANSMIT_ENABLE);
usart_enable(LORA_UART);
/* AUX引脚配置为输入模式 */
gpio_init(LORA_AUX_GPIO, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, LORA_AUX_GPIO_PIN);
}
void lora_send_data(uint8_t* data, uint8_t len)
{
/* 发送数据到LoRa模块 */
for (uint8_t i = 0; i < len; i++)
{
usart_data_transmit(LORA_UART, data[i]);
while (usart_flag_get(LORA_UART, USART_FLAG_TBE) == RESET)
;
}
}
```
接下来,我们创建一个 `usart.h` 头文件,其中包含了 USART 相关的函数声明和宏定义:
```c
#ifndef USART_H
#define USART_H
#include "gd32f10x.h"
#define USART_UART USART1
#define USART_UART_CLK RCU_USART1
#define USART_UART_IRQn USART1_IRQn
#define USART_UART_GPIO_PIN_TX GPIO_PIN_9
#define USART_UART_GPIO_PIN_RX GPIO_PIN_10
#define USART_UART_GPIO GPIOA
void usart_init(void);
void usart_send_data(uint8_t* data, uint8_t len);
#endif /* USART_H */
```
然后,我们创建一个源文件 `usart.c` ,其中实现了 USART 相关的函数:
```c
#include "usart.h"
void usart_init(void)
{
/* 串口初始化 */
rcu_periph_clock_enable(USART_UART_CLK);
rcu_periph_clock_enable(RCU_AF);
gpio_init(USART_UART_GPIO, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, USART_UART_GPIO_PIN_TX);
gpio_init(USART_UART_GPIO, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USART_UART_GPIO_PIN_RX);
usart_deinit(USART_UART);
usart_baudrate_set(USART_UART, 115200U);
usart_word_length_set(USART_UART, USART_WL_8BIT);
usart_stop_bit_set(USART_UART, USART_STB_1BIT);
usart_parity_config(USART_UART, USART_PM_NONE);
usart_hardware_flow_rts_config(USART_UART, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART_UART, USART_CTS_DISABLE);
usart_receive_config(USART_UART, USART_RECEIVE_ENABLE);
usart_transmit_config(USART_UART, USART_TRANSMIT_ENABLE);
usart_enable(USART_UART);
}
void usart_send_data(uint8_t* data, uint8_t len)
{
/* 发送数据到另一节点 */
for (uint8_t i = 0; i < len; i++)
{
usart_data_transmit(USART_UART, data[i]);
while (usart_flag_get(USART_UART, USART_FLAG_TBE) == RESET)
;
}
}
```
最后,我们的主程序文件如下:
```c
#include "lora.h"
#include "usart.h"
#define LED_GPIO_PIN GPIO_PIN_7
#define LED_GPIO GPIOC
int main(void)
{
/* 初始化LoRa模块 */
lora_init();
/* 初始化USART模块 */
usart_init();
/* 初始化LED */
rcu_periph_clock_enable(RCU_GPIOC);
gpio_init(LED_GPIO, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_GPIO_PIN);
while(1)
{
uint8_t data[] = "Hello, LoRa!"; // 要发送的数据
lora_send_data(data, sizeof(data)-1); // 减去1是为了不发送字符串结尾的'\0'字符
/* 检查数据传输状态 */
if (gpio_input_bit_get(LORA_AUX_GPIO, LORA_AUX_GPIO_PIN))
{
gpio_bit_reset(LED_GPIO, LED_GPIO_PIN); // 数据传输失败,LED不亮
}
else
{
gpio_bit_set(LED_GPIO, LED_GPIO_PIN); // 数据传输成功,LED亮
usart_send_data(data, sizeof(data)-1); // 减去1是为了不发送字符串结尾的'\0'字符
}
delay_1ms(1000); // 延时 1 秒钟
}
}
```
请根据你的具体需求进行适当的修改和调整。希望这次能帮到你!如有任何问题,请随时向我提问。
阅读全文