CubeMX软件使用从入门到精通STM32F429系列--2串口打印测试以及工程结构讲解

(1)选择单片机型号
(2)引脚配置
这里面单片机的引脚配置是配置串口所需要的引脚。我使用的是USART1(通用同步异步收发),我们选择异步模式。
(3)这里写图片描述
串口配置可以选择默认,我们这里选择波特率为115200。
(4)生成工程
添加下面的一段代码到主文件中

#define PUTCHAR_PROTOTYPE  int fputc(int ch, FILE *f)
/** 
  * @brief  Retargets the C library printf function to the USART. 
  * @param  None 
  * @retval None 
  */  
PUTCHAR_PROTOTYPE
{  
  /* Place your implementation of fputc here */ 
    husart1.Instance->SR;   
  /* e.g. write a character to the USART */  
    husart1.Instance->DR = (uint8_t)ch;

  /* Loop until the end of transmission */ 
  while(__HAL_USART_GET_FLAG(&husart1, USART_FLAG_TC) == RESET)  
  {  
  }  

  return ch;  
}

下载好之后就可以进行串口打印了。

这里写图片描述
Drivers下面有两个自动生成的文件夹
一个是CMSIS(这个是ARM公司做的),ARM公司对CMSIS的定义:
ARM® Cortex™ 微控制器软件接口标准 (CMSIS) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。CMSIS 可实现与处理器和外设之间的一致且简单的软件接口,从而简化软件的重用,缩短微控制器开发人员新手的学习过程,并缩短新设备的上市时间。
下面包含了Device(我的文件夹里就是ST公司的,当然如果使用NXP也会定义NXP的驱动),DSP_Lib(DSP库),Include(包含了ARM的很多系列,从cm0到cm4,7等等),RTOS(实时操作系统)等。
一个文件夹是STM32F4xx_HAL_Driver。将头文件和c文件分开,这个是ST公司做的,声明了所有的内部外设。
Inc文件夹下面是main.h,stm32f4xx_hal_conf.h,stm32f4xx_it.h等头文件。

src文件夹下面是Inc对应的c文件。

MDK-ARM是工程配置文件夹。

最后一个是STM32CubeMX格式的文件,我们可以对这个反复修改,非常方便。

在CMSIS\Include\core_cm4.h头文件中,给出了NVIC结构体以及一些基本函数。

下图是生成的工程的结构:
这里写图片描述
Hal(Hardware Abstraction Layer)硬件抽象层驱动文件夹:
stm32f4xx_hal_rcc_ex.c和stm32f4xx_hal_rcc.c RCC是STM32的时钟控制器,可开启或关闭各总线的时钟,在使用各外设功能必须先开启其对应的时钟,没有这个时钟内部的各器件就不能运行。
stm32f4xx_hal_dma.c dma外设的配置文件
下面的还有其他很多外设和模块的配置,分别有tim,flash,gpio,pwr,usart,hal,hal_cortex等等。

HAL的初始化

HAL_StatusTypeDef HAL_Init(void)
{
  /* Configure Flash prefetch, Instruction cache, Data cache */ 
#if (INSTRUCTION_CACHE_ENABLE != 0U)
  __HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
#endif /* INSTRUCTION_CACHE_ENABLE */

#if (DATA_CACHE_ENABLE != 0U)
  __HAL_FLASH_DATA_CACHE_ENABLE();
#endif /* DATA_CACHE_ENABLE */

#if (PREFETCH_ENABLE != 0U)
  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
#endif /* PREFETCH_ENABLE */

  /* Set Interrupt Group Priority */
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);

  /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
  HAL_InitTick(TICK_INT_PRIORITY);

  /* Init the low level hardware */
  HAL_MspInit();

  /* Return function status */
  return HAL_OK;
}

接下来我们仔细分析一个文件里面的代码。
关于注释,我们可以发现这些都是一样的套路,再研究可以发现他们是有一套统一标准的,这个标准和doxygen软件的标准一模一样,这样子写的好处就是可以直接生成代码注释说明文档。

/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  *
*/

文件开头的注释格式如上所示。
/**
* @brief The application entry point.
*
* @retval None
*/
函数的注释格式如上所示。

猜你喜欢

转载自blog.csdn.net/qq_16481211/article/details/80605705