灵动mm32f103c8t6 串口例程
时间: 2023-05-26 07:03:45 浏览: 144
下面是灵动mm32f103c8t6串口例程的代码:
```c
#include "gd32f10x.h"
#include "stdio.h"
/* 定义串口1的GPIO引脚以及USART外设 */
#define USART_GPIO_PORT GPIOA
#define USART_GPIO_CLK RCU_GPIOA
#define USART_TX_PIN GPIO_PIN_9
#define USART_RX_PIN GPIO_PIN_10
#define USARTx USART1
#define USART_CLK RCU_USART1
/* 定义波特率为115200 */
#define USART_BAUDRATE 115200
int fputc(int ch, FILE *f);
void usart1_init(void);
int main(void) {
/* 设置系统时钟为48MHz */
SystemInit();
/* 初始化串口 */
usart1_init();
while (1) {
/* 向串口发送字符串 */
printf("Hello, world!\r\n");
delay_ms(1000);
}
return 0;
}
/**
* @brief 串口1初始化函数
* @retval None
*/
void usart1_init(void) {
/* 使能GPIO时钟 */
rcu_periph_clock_enable(USART_GPIO_CLK);
/* 配置 USART1_TX 为推挽输出 */
gpio_init(USART_GPIO_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, USART_TX_PIN);
/* 配置 USART1_RX 为上拉输入 */
gpio_init(USART_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USART_RX_PIN);
/* 使能USART时钟 */
rcu_periph_clock_enable(USART_CLK);
/* 配置USART参数:波特率115200、8数据位、1个停止位、无校验位 */
usart_deinit(USARTx);
usart_baudrate_set(USARTx, USART_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 */
usart_enable(USARTx);
}
/**
* @brief 重定向fputc函数
* @param[in] ch 输出字符
* @param[in] f 输出流
* @retval 输出字符
*/
int fputc(int ch, FILE *f) {
/* 等待发送缓冲区为空 */
while (!(USARTx->STAT & USART_STAT_TBE));
/* 将数据写入USART数据寄存器 */
usart_data_transmit(USARTx, (uint8_t)ch);
return ch;
}
```
在这个例程中,我们使用USART1作为串口,将其连接到对应的GPIO引脚上。然后,通过调用usart1_init函数来初始化USART1,配置波特率、数据位、停止位、校验位等参数,并将USART1启用。
使用printf向串口发送数据时,我们可以通过重定向fputc函数来将输出从控制台移到USART1上。在实现fputc函数中,我们将输出数据写入USART数据寄存器,并在等待发送缓冲区为空之后再返回发送成功。
阅读全文