pezayo's Blog

蓦然回首,那人却在灯火阑珊处

0%

STM32 HAL库使用&学习

STM32F407#

我在网上看到很多奇奇怪怪的东西。其中就有一个STM32F4discovery,这个我不知道是啥,但总是会看到。包括使用CLion时配OpenOCD时都会跳出它的config文件。但最后我选的还是STM32F4xx的config。在此还得感谢@Keiler提供的友情帮助,帮我暂时配好了CLion的开发环境。有关于CLion开发环境的配置我在另一篇文档中有讲述。

开发环境:

板子:正点原子探索者开发板

MCU:STM32F407ZGT6

串口:RS232

屏幕:TFTLCD(已损坏)

软件:CLion + STM32CubeMX 以及 Keil

教程:正点原子官方配套例程

下载器:ST-Link

串口配置#

配置串口让我很是头疼。基本照着网上的来一遍都可以。但是其中还有一些细节——一个是将 printf() 函数重定向到串口,一个是要配置 HSE_VALUE 的值,因为它直接影响到串口波特率的配置。

  1. printf() 重定向:直接参考这篇文档,这篇文档讲的非常详细,只要在 usart.c 文件末尾加上以下代码,另外还需在 usart.h 头文件中 #include <stdio.h> 即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /* USER CODE BEGIN 1 */
    #ifdef __GNUC__
    /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
    set to 'Yes') calls __io_putchar() */
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    #else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
    #endif /* __GNUC__ */
    /**
    * @brief Retargets the C library printf function to the USART.
    * @param None
    * @retval None
    */
    PUTCHAR_PROTOTYPE
    {
    /* Place your implementation of fputc here */
    /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

    return ch;
    }
    /* USER CODE END 1 */
  2. 配置HSE_VALUE:参考这篇博客,这篇博客讲到 HSE_VALUE 如何影响到串口波特率的配置问题。我遇到的问题是使用 STM32CubeMX 直接自动生成 168MHz 的时钟,这里了他默认的外部时钟为25MHz,即 HSE_VALUE = 25000000。而我对比了正点原子的官方串口通信例程中的值,例程中的值则为8MHz。所以我的串口一直乱码,而例程则不会乱码,将 HSE_VALUE 改为8MHz时,串口通信正常。

至此,串口配置完毕。此后我便可以通过串口进行通信了!!!耶比

定时器中断配置#

定时器中断,这里我使用的是定时器TIM3,进入

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道