当前位置:   article > 正文

[STM32H5]【NUCLEO- H563ZI 测评】-05-串口打印测试及串口重定向_stm32h563-nucleo原理图下载

stm32h563-nucleo原理图下载

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

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

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


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

  1. #include "DRV_UART.h"
  2. UART_HandleTypeDef huart4;
  3. void UART4_AF_Init(void)
  4. {
  5. __HAL_RCC_GPIOC_CLK_ENABLE();
  6. __HAL_RCC_UART4_CLK_ENABLE();
  7. GPIO_InitTypeDef gpio_init_structure;
  8. //--PC10- UART4-TXD--
  9. gpio_init_structure.Pin =GPIO_PIN_10;
  10. gpio_init_structure.Mode = GPIO_MODE_AF_PP;
  11. gpio_init_structure.Pull = GPIO_NOPULL;
  12. gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  13. gpio_init_structure.Alternate=GPIO_AF8_UART4;//--设置引脚复用功能--
  14. HAL_GPIO_Init(GPIOC, &gpio_init_structure);
  15. //--PC11- UART4-RXD---
  16. gpio_init_structure.Pin =GPIO_PIN_11;
  17. gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
  18. gpio_init_structure.Pull = GPIO_NOPULL;
  19. gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  20. gpio_init_structure.Alternate=GPIO_AF8_UART4;//--设置引脚复用功能--
  21. HAL_GPIO_Init(GPIOC, &gpio_init_structure);
  22. }
  23. void USART4_Init(void)
  24. {
  25. UART4_AF_Init();
  26. huart4.Instance = UART4;
  27. huart4.Init.BaudRate = 115200;
  28. huart4.Init.WordLength = UART_WORDLENGTH_8B;
  29. huart4.Init.StopBits = UART_STOPBITS_1;
  30. huart4.Init.Parity = UART_PARITY_NONE;
  31. huart4.Init.Mode = UART_MODE_TX_RX;
  32. huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  33. huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  34. huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  35. huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  36. huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  37. if (HAL_UART_Init(&huart4) != HAL_OK)
  38. {
  39. }
  40. if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  41. {
  42. }
  43. if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  44. {
  45. }
  46. if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
  47. {
  48. }
  49. }

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

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

  1. int fputc(int ch,FILE *f)
  2. {
  3. HAL_UART_Transmit(&huart4,(unsigned char *)&ch,1,20);
  4. return ch;
  5. }

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

  1. #include "stm32h5xx_hal.h"
  2. #include "DRV_LED.h"
  3. #include "DRV_TIM.h"
  4. #include "DRV_UART.h"
  5. unsigned char TestFData[]="Thes is a Uart Demo\r\n";
  6. int main(void)
  7. {
  8. HAL_Init();
  9. SystemClock_Config();
  10. Tim1_Init();
  11. LED_GPIO_Init();
  12. USART4_Init();
  13. while (1)
  14. {
  15. HAL_UART_Transmit(&huart4,TestFData,21,20);
  16. printf("This is Printf Test !\r\n");
  17. LED_Test( );
  18. }
  19. }

下面来看看测试效果

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/163592
推荐阅读
相关标签
  

闽ICP备14008679号