gd32f303写一个 串口程序
时间: 2023-12-07 19:02:34 浏览: 84
自己写的串口程序
好的,以下是一个简单的 GD32F303 串口程序示例:
```c
#include "gd32f30x.h"
/* 定义串口号和波特率 */
#define UART_NUM UART1
#define BAUD_RATE 115200
/* 初始化串口函数 */
void uart_init(void)
{
/* 使能 USART 时钟 */
rcu_periph_clock_enable(RCU_UART1);
/* 配置 UART 引脚 */
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
/* 配置 UART 参数 */
usart_deinit(UART_NUM);
usart_baudrate_set(UART_NUM, BAUD_RATE);
usart_word_length_set(UART_NUM, USART_WL_8BIT);
usart_stop_bit_set(UART_NUM, USART_STB_1BIT);
usart_parity_config(UART_NUM, USART_PM_NONE);
usart_hardware_flow_rts_config(UART_NUM, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(UART_NUM, USART_CTS_DISABLE);
usart_receive_config(UART_NUM, USART_RECEIVE_ENABLE);
usart_transmit_config(UART_NUM, USART_TRANSMIT_ENABLE);
usart_enable(UART_NUM);
}
/* 串口发送数据函数 */
void uart_send_data(uint8_t *data, uint32_t len)
{
uint32_t i;
for (i = 0; i < len; i++) {
usart_data_transmit(UART_NUM, data[i]);
while (usart_flag_get(UART_NUM, USART_FLAG_TBE) == RESET);
}
}
/* 串口接收数据函数 */
uint8_t uart_receive_data(void)
{
while (usart_flag_get(UART_NUM, USART_FLAG_RBNE) == RESET);
return usart_data_receive(UART_NUM);
}
int main(void)
{
uint8_t data[] = "Hello, world!\r\n";
uint8_t buffer;
uart_init();
uart_send_data(data, sizeof(data));
buffer = uart_receive_data();
while (1) {
/* 你的代码逻辑 */
}
}
```
在这个示例中,我们使用了 GD32F303 的 USART1 作为串口,波特率为 115200。我们首先需要调用 `uart_init()` 函数来初始化串口。然后,我们可以使用 `uart_send_data()` 函数来发送数据,使用 `uart_receive_data()` 函数来接收数据。
在 `main()` 函数中,我们首先发送了一串 "Hello, world!\r\n" 的数据,然后通过调用 `uart_receive_data()` 函数来接收一个字节的数据,并将其存储在 `buffer` 变量中。你可以根据你的应用程序需求进行修改。
阅读全文