GD32串口通信PB6,PB7

我发现GD32很多接口都需要冲映射,刚开始还是不习惯,还要打开要选打开AFIO时钟。算了,直接看代码:

1,usart.c


#include <stdio.h>
#include "gd32f10x.h"

#include "usart.h"

/*********************************************************************
 * PUBLIC FUNCTIONS
 */
/**
 @brief 串口驱动初始化
 @param 无
 @return 无
*/
void USART_Init(void)
{
	

	/*要选打开AFIO时钟,然后再打开GPIO时钟,然后再重映射GPIO,然后再使能UART0时钟,最后再配置            UART0参数。*/
    rcu_periph_clock_enable(RCU_AF);//Need!!!!
    rcu_periph_clock_enable(RCU_GPIOB);
    gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);
	
    /* enable USART clock */
    rcu_periph_clock_enable(RCU_USART0);
	
    /* connect port to USARTx_Tx */
    gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
 
    /* connect port to USARTx_Rx */
    gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
	
	gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);
	
 
    /* USART configure */
    usart_deinit(USART0);
    usart_baudrate_set(USART0, 115200U);
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
		
	//usart_parity_config(USART0,USART_PM_EVEN);
	//usart_word_length_set(USART0,USART_WL_8BIT);
	//usart_stop_bit_set(USART0,USART_STB_1BIT);
		
		
    usart_enable(USART0);
		
	//nvic_irq_enable(USART0_IRQn, 3U, 3U);
	//usart_interrupt_enable(USART0,USART_INT_RBNE);
}

/**
 @brief 串口写入数据
 @param pData -[in] 写入数据
 @param dataLen -[in] 写入数据长度
 @return 无
*/
void UART_Write(uint8_t *pData, uint32_t dataLen)
{
    uint8_t i;	
    for(i = 0; i < dataLen; i++)
    {
        usart_data_transmit(USART0, pData[i]);                  // 发送一个字节数据
        while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); // 发送完成判断
    }
}

/**
  * @brief 重定向c库函数printf到USARTx
  * @retval None
  */
int fputc(int ch, FILE *f)
{
    usart_data_transmit(USART0, (uint8_t)ch);
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
    return ch;
}

/**
  * @brief 重定向c库函数getchar,scanf到USARTx
  * @retval None
  */
int fgetc(FILE *f)
{
    uint8_t ch = 0;
    ch = usart_data_receive(USART0);
    return ch;
}

/****************************************************END OF FILE****************************************************/

2,main.c

#include "gd32f10x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "gd32f10x_eval.h"
#include "led.h"
#include "usart.h"


void delay(void)
{
	uint16_t i=0,j=0;
	for(i=0;i<0xffff;i++)
		for(j=0;j<30;j++);
}




int main(void)
{
	
	LedGPIO_init();
	USART_Init();

	printf("usart1_test\r\n");
	while(1)
	{
		printf("usart1_test\r\n");
		delay();

	}
}


3,实验结果

本文主要记录代码,不讲原理。 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值