windows下keil的gd芯片串口与FM17550通讯c语言demo
时间: 2024-01-21 12:03:47 浏览: 32
以下是使用Keil编译器在Windows下使用GD芯片与FM17550进行串口通讯的C语言示例代码:
```c
#include <stdio.h>
#include <string.h>
#include <gd32f30x.h>
#define USARTx USART1
#define USARTx_CLK RCU_USART1
#define USARTx_APBxClkCmd RCU_USART1EN
#define USARTx_IRQn USART1_IRQn
#define USARTx_IRQHandler USART1_IRQHandler
#define USARTx_TX_PIN GPIO_PIN_9
#define USARTx_TX_GPIO_PORT GPIOA
#define USARTx_TX_GPIO_CLK RCU_GPIOA
#define USARTx_RX_PIN GPIO_PIN_10
#define USARTx_RX_GPIO_PORT GPIOA
#define USARTx_RX_GPIO_CLK RCU_GPIOA
#define USARTx_BAUDRATE 9600
void usart_init(void)
{
/* enable GPIO clock */
rcu_periph_clock_enable(USARTx_TX_GPIO_CLK);
rcu_periph_clock_enable(USARTx_RX_GPIO_CLK);
/* enable USART clock */
rcu_periph_clock_enable(USARTx_CLK);
/* connect port to USARTx_Tx */
gpio_init(USARTx_TX_GPIO_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, USARTx_TX_PIN);
/* connect port to USARTx_Rx */
gpio_init(USARTx_RX_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USARTx_RX_PIN);
/* USART configure */
usart_deinit(USARTx);
usart_baudrate_set(USARTx, USARTx_BAUDRATE);
usart_word_length_set(USARTx, USART_WL_8BIT);
usart_stop_bit_set(USARTx, USART_STB_1BIT);
usart_parity_config(USARTx, USART_PM_NONE);
usart_hardware_flow_rts_config(USARTx, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USARTx, USART_CTS_DISABLE);
usart_receive_config(USARTx, USART_RECEIVE_ENABLE);
usart_transmit_config(USARTx, USART_TRANSMIT_ENABLE);
usart_enable(USARTx);
usart_interrupt_enable(USARTx, USART_INT_RBNE);
nvic_irq_enable(USARTx_IRQn, 0, 0);
}
void usart_send_data(uint8_t *buffer, uint32_t length)
{
uint32_t i;
for (i = 0; i < length; i++) {
usart_data_transmit(USARTx, buffer[i]);
while (usart_flag_get(USARTx, USART_FLAG_TBE) == RESET);
}
}
void USARTx_IRQHandler(void)
{
if (usart_flag_get(USARTx, USART_FLAG_RBNE) != RESET) {
uint8_t ch;
ch = usart_data_receive(USARTx);
usart_send_data(&ch, 1);
}
}
int main(void)
{
usart_init();
uint8_t buffer[] = "Hello, World!\r\n";
usart_send_data(buffer, strlen((char *)buffer));
while (1);
return 0;
}
```
根据您的实际情况修改程序中的串口号、波特率等参数,并编译运行程序即可。希望这些信息能对您有所帮助。