[STM32H5]【NUCLEO- H563ZI 测评】-05-串口打印测试及串口重定向

前两天吧定时器搞了,这次是想把串口搞定,因为串口是作为对外界通信的一个媒介,搞定了串口就可以随时随地的把板子的信息打印出来,查看程序运行的步骤以及调试的消息,虽然用Hall库还是不太熟练,但是还是在慢慢接纳这一程序的表现方式。
好啦,我们先来查看一下,我们的的原理图,以及数据手册,

PC10和PC11,两个引脚在数据手册中

由数据手册是UART4,所以,我们将这两个的串口直接引了出来,一个调试器可以做调试,程序下载,还可以做串口的输出。


修改之后,就是这个样子,因为板载的调试器无法使用,所以这个测评还是有点艰难,祝愿一切顺利吧。
好了,开始挑调试代码了。在调用了复用模式的情况下,需要查找手册,保证串口启用复用功能,并且保证开启了引脚的时钟。
下面是这个的代码:

#include "DRV_UART.h"


UART_HandleTypeDef huart4;

void UART4_AF_Init(void)
{
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_UART4_CLK_ENABLE(); 
        GPIO_InitTypeDef  gpio_init_structure;
        
        //--PC10- UART4-TXD--
        gpio_init_structure.Pin   =GPIO_PIN_10;
        gpio_init_structure.Mode  = GPIO_MODE_AF_PP;
        gpio_init_structure.Pull  = GPIO_NOPULL;
        gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        gpio_init_structure.Alternate=GPIO_AF8_UART4;//--设置引脚复用功能--
        HAL_GPIO_Init(GPIOC, &gpio_init_structure);

        //--PC11- UART4-RXD---
        gpio_init_structure.Pin   =GPIO_PIN_11;
        gpio_init_structure.Mode  = GPIO_MODE_OUTPUT_PP;
        gpio_init_structure.Pull  = GPIO_NOPULL;
        gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        gpio_init_structure.Alternate=GPIO_AF8_UART4;//--设置引脚复用功能--
        HAL_GPIO_Init(GPIOC, &gpio_init_structure);
        
        
}





void USART4_Init(void)
{

    UART4_AF_Init();
        huart4.Instance = UART4;
        huart4.Init.BaudRate = 115200;
        huart4.Init.WordLength = UART_WORDLENGTH_8B;
        huart4.Init.StopBits = UART_STOPBITS_1;
        huart4.Init.Parity = UART_PARITY_NONE;
        huart4.Init.Mode = UART_MODE_TX_RX;
        huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
        huart4.Init.OverSampling = UART_OVERSAMPLING_16;
        huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
        huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
        huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
        if (HAL_UART_Init(&huart4) != HAL_OK)
        {

        }
        if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
        {

        }
        if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
        {

        }
        if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
        {

        }

}



整个串口的代码相对比较简单,不过还没有重定向,如果重定向好了,那么就可以使用printf 函数了。
那么就来一下串口输出的结果吧。

完成了这一步,我们算是完成了差u纽扣的基本发送的函数,接下来就是printf的重定向的工作,这一步的话想对的简单得多,网上的例子也很多。
只需要添加下面的函数即可

int fputc(int ch,FILE *f)
{

        HAL_UART_Transmit(&huart4,(unsigned char *)&ch,1,20);
        return ch;
}

 然后下面修改一下主函数来进行transmit以及printf的测试

#include "stm32h5xx_hal.h"
#include "DRV_LED.h"
#include "DRV_TIM.h"
#include "DRV_UART.h"
unsigned char TestFData[]="Thes is a Uart Demo\r\n";
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  Tim1_Init();
  LED_GPIO_Init();
  USART4_Init();
  while (1)
  {
         HAL_UART_Transmit(&huart4,TestFData,21,20);
         printf("This is Printf Test !\r\n");
     LED_Test( );
  }
}

下面来看看测试效果

好了,今天的串口驱动的展示就到这里。
---------------------
作者:shenxiaolin
链接:https://bbs.21ic.com/icview-3321502-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值