三、GD32F407VET6使用串口1当做调试口

零、所需文件及环境

        1、第二章建立好的定时器点灯程序

        2、编译环境MDK5(KEIL5)   

        3、一个GD32F407VET6硬件

        4、一个下载器j-link 或 st-link等

        5.代码编辑器 Notepad++   (可以不要 用记事本也能编译  都是习惯的问题)

        6.USB转TTL设备  用于连接电脑串口助手

壹、复制定时器点灯程序

1.1 复制定时器点灯程序并进行重命名

1.2 进入USER/BSP文件夹下 复制BSP_LED文件夹改为BSP_DEBUG

1.3 进入USER/BSP/BSP_DEBUG文件夹,修改文件名

贰、编写BSP_DEBUG.c与BSP_DEBUG.h代码

2.1 打开BSP_DEBUG.h修改为

#ifndef  __BSP_DEBUG_H
#define  __BSP_DEBUG_H

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

#define BSP_DEBUG_REC_LEN              200      //定义最大接收字节数 200
extern uint8_t BSP_DEBUG_RX_BUF[BSP_DEBUG_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节.
extern uint16_t BSP_DEBUG_RX_BUF_LEN;       //接收状态标记    

extern void BSP_DEBUG(uint32_t baudval);

extern void BSP_DEBUG_SendHex(uint8_t *buf,uint16_t len);


#endif

2.2 打开BSP_DEBUG.c修改为   其他串口也可使用此程序 

#include "BSP_DEBUG.h"


#define BSP_DEBUGx_RX_PIN             GPIO_PIN_6
#define BSP_DEBUGx_TX_PIN             GPIO_PIN_5
#define BSP_DEBUGx_GPIO_PORT               GPIOD
#define BSP_DEBUGx_GPIO_CLK                RCU_GPIOD


#define BSP_DEBUGx                    USART1
#define BSP_DEBUGx_RX_IRQn            USART1_IRQn
#define BSP_DEBUGx_RX_Pre_Priority    1
#define BSP_DEBUGx_RX_Sub_Priority    0
#define BSP_DEBUGx_RX_IRQHandler      USART1_IRQHandler
#define BSP_DEBUGx_CLK                RCU_USART1


#define BSP_DEBUG_REC_LEN              200      //定义最大接收字节数 200
uint8_t BSP_DEBUG_RX_BUF[BSP_DEBUG_REC_LEN]={0};     //接收缓冲,最大USART_REC_LEN个字节.
uint16_t BSP_DEBUG_RX_BUF_LEN=0;       //接收状态标记    

/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
    usart_data_transmit(USART1, (uint8_t)ch);
    while(RESET == usart_flag_get(USART1, USART_FLAG_TBE));
    return ch;
}

void BSP_DEBUG(uint32_t baudval)
{
            /* enable GPIO clock */
            rcu_periph_clock_enable(BSP_DEBUGx_GPIO_CLK);//使能GPIOA时钟
            /* enable USART clock */
            rcu_periph_clock_enable(BSP_DEBUGx_CLK);//使能USART0时钟

            gpio_af_set(BSP_DEBUGx_GPIO_PORT, GPIO_AF_7, BSP_DEBUGx_TX_PIN);//复用功能7
            gpio_mode_set(BSP_DEBUGx_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, BSP_DEBUGx_TX_PIN);//PA9配置成串口输出
            gpio_output_options_set(BSP_DEBUGx_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,BSP_DEBUGx_TX_PIN);


            gpio_af_set(BSP_DEBUGx_GPIO_PORT, GPIO_AF_7, BSP_DEBUGx_RX_PIN);//复用功能7
            gpio_mode_set(BSP_DEBUGx_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, BSP_DEBUGx_RX_PIN);//PA10配置成串口输入
            gpio_output_options_set(BSP_DEBUGx_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,BSP_DEBUGx_RX_PIN);

            usart_deinit(BSP_DEBUGx);    // 串口复位
            usart_word_length_set(BSP_DEBUGx, USART_WL_8BIT);  // 字长
            usart_stop_bit_set(BSP_DEBUGx, USART_STB_1BIT);    // 停止位
            usart_parity_config(BSP_DEBUGx, USART_PM_NONE);
            usart_baudrate_set(BSP_DEBUGx, baudval);     // 波特率
            usart_receive_config(BSP_DEBUGx, USART_RECEIVE_ENABLE);        // 接收使能
            usart_transmit_config(BSP_DEBUGx, USART_TRANSMIT_ENABLE);      // 发送使能
            usart_hardware_flow_rts_config(BSP_DEBUGx, USART_RTS_DISABLE);
            usart_hardware_flow_cts_config(BSP_DEBUGx, USART_CTS_DISABLE);
            usart_enable(BSP_DEBUGx);           // 串口使能
            nvic_irq_enable(BSP_DEBUGx_RX_IRQn,BSP_DEBUGx_RX_Pre_Priority,BSP_DEBUGx_RX_Sub_Priority);

}

void BSP_DEBUG_SendHex(uint8_t *buf,uint16_t len)
{
     uint8_t t;
//       SET_485_TX        // 发送使能
     for(t=0;t<len;t++)      
     {           
         while(usart_flag_get(BSP_DEBUGx, USART_FLAG_TC) == RESET);  
         usart_data_transmit(BSP_DEBUGx,buf[t]);
     }     
     while(usart_flag_get(BSP_DEBUGx, USART_FLAG_TC) == RESET){;}  
      
         
         usart_interrupt_enable(BSP_DEBUGx, USART_INT_RBNE);  // 接收中断使能
//         SET_485_RX
}

void BSP_DEBUGx_RX_IRQHandler(void)
{   
   
   uint8_t data;
  if((RESET != usart_interrupt_flag_get(BSP_DEBUGx, USART_INT_FLAG_RBNE)) &&
       (RESET != usart_flag_get(BSP_DEBUGx, USART_FLAG_RBNE))){
        /* Read one byte from the receive data register */  
       data =usart_data_receive(BSP_DEBUGx);
                         BSP_DEBUG_RX_BUF[BSP_DEBUG_RX_BUF_LEN++] = data;
             }

}

叁、打开工程,将BSP_DEBUG.c添加入工程并添加头文件路径

肆、修改main函数


#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "BSP_LED.h"
#include "BSP_TIMER.h"
#include "BSP_DEBUG.h"


uint8_t text_data[10]={1,2,3,4,5,6,7,8,9,0};


int main(void)
{
    systick_config();
        nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
        LED_Init();    
        timer_config(8400-1,5000-1);//8400*5000/84M=0.5S
        BSP_DEBUG(115200);
        BSP_DEBUG_SendHex(&text_data[0],10);
    
    while(1) {
            
//            LED_Open();
//            delay_1ms(500);
            BSP_DEBUG_SendHex(&BSP_DEBUG_RX_BUF[0],BSP_DEBUG_RX_BUF_LEN);
//            LED_Close();
//          delay_1ms(500);
    }
}

伍、编译下载

4.1 好家伙 乱码  软件和我设置的波特率一致啊

4.2 改时钟 外部输入的时钟和代码里面的时钟对应不上 25改为8M

4.3 时钟改完之后显示正常了

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值