STM32CubeMX之Basic-创建工程模板和printf输出

1 使用STMCubeMX配置工程

该工程基本实现的基本功能如下:

  1. 使用外部晶振8MHz
  2. 使用ST-LINK作为程序下载调试工具
  3. 实现引脚的基本输出,控制LED
  4. 实现UART的基本功能,实现printf调试

1.1 配置工程Debug方式和SysTick

  1. Debug选择Serial Wire,使用ST-LINK作为程序下载调试工具在这里插入图片描述

  2. 选择Timebase的时钟来源,选择SysTick
    在这里插入图片描述

1.2 时钟配置

1.2.1 时钟源的选择

  1. 高速时钟选择外部高速晶振8MHz
  2. 低速时钟选择外部低速晶振32.768KHz (如果板子没贴低速时钟或用不到可以不配置)
    在这里插入图片描述

1.2.2 外设时钟配置

使用8MHz晶振典型配置如下
在这里插入图片描述
使用16MHz晶振典型配置如下
在这里插入图片描述

1.3 配置引脚为输入输出

1.3.1 配置引脚为输出驱动LED

  1. PB5作为LED0;PE5作为LED1
    在这里插入图片描述

1.3.2 配置引脚为输入作为按键

  1. PE4作为KEY0
    在这里插入图片描述

1.4 配置USART1作为printf

  1. USART1的TX为PA9;RX为PA10
  2. 选择异步通信,其他参数选择默认
    在这里插入图片描述

1.5 工程管理配置

1.5.1 配置工程

  1. 修改工程名
  2. 选择工程保存位置
  3. 选择工程编译工具MDK-ARM,即Keil
  4. 修改堆和栈的大小
  5. 选择固件库,默认即可
    在这里插入图片描述

1.5.2 配置代码

在这里插入图片描述

1.6 生成工程

其他参数没有更改可以保持默认
在这里插入图片描述

2 使用KEIL打开工程

2.1 检验工程是否有错

  1. 编译工程,0 错误,0 警告。
    在这里插入图片描述
  2. 下载程序到开发板
    在这里插入图片描述
  3. 工程基本完整,没有错误

2.2 添加功能相关代码

2.2.1 添加printf功能相关代码

检验printf功能之前需要添加必要的代码

  1. 在usart.c文件中适当的位置添加如下代码
/* USER CODE BEGIN 0 */
#include <stdio.h>

/* USER CODE END 0 */

/* USER CODE BEGIN 1 */
int fputc(int ch, FILE *f)//printf
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1,0xffff);  //
	return (ch);
}

//如果上诉配置后printf无法打印请使用如下代码
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
 while ((USART1->SR & 0X40) == 0);
 USART1->DR = (uint8_t) ch;
 return ch;
}
/* USER CODE END 1 */

2.2.2 添加output和input相关代码

int main(void)
{
  uint8_t flag = 0;
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  printf("2021.05.14 \n");
  while (1)
  {
		if(0 == HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin))
		{
		   HAL_Delay(10); /*延时,单位:ms*/
			 if(0 == HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin))
			 {
			    if(0 == flag)
					{
						flag = 1;
						HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin); /*每次电平取反*/
					}
			 }
		}
		else
		{
		   flag = 0;
		}

//		HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);    /*给高电平*/
//		HAL_Delay(200);

//		HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);  /*给低电平*/
//		HAL_Delay(200);
  }
}

2.3 工程测试

  1. 上电或复位可以串口打印出 2021.05.14
  2. 按键key0实现LED0亮灭

3 使用STM32CubeIDE直接打开工程

使用ST-LINK V2烧录程序

  1. 更新ST-LINK :Help—>ST-LINK更新
  2. 在检测到了ST-LINK后还是不能点击烧录程序,可以尝试关闭工程,然后再次打开

3.1 图形界面配置完工程后生成工程

在这里插入图片描述

3.2 重定向printf函数

  1. 在usart.c文件中写入如下函数

    /* USER CODE BEGIN 1 */
    
    #ifdef __GNUC__
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    #else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
    #endif
    PUTCHAR_PROTOTYPE
    {  
    
        while ((USART1->SR & 0X40) == 0); 
        USART1->DR = (uint8_t) ch;
        return ch;
    }
    
    
  2. 在main.c文件中写入如下测试函数

      /* USER CODE BEGIN 2 */
        printf("2023.09.17 \n");
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
        int value_int = 10;
        float val_float = 10.0;
        while (1)
        {
            printf("%d***%0.3f\r\n", value_int, val_float);
            val_float += 1.3365;
            value_int += 1;
            HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin);
            HAL_Delay(300);
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
        }
      /* USER CODE END 3 */
    }
    
  3. 编译烧录
    发现不能打印浮点数
    在这里插入图片描述

3.3实重定向printf函数且能输出浮点数

  1. 鼠标右击工程 —>Properties
    在这里插入图片描述
  2. 勾选如下,并在确认后再次编译
    在这里插入图片描述
  3. 浮点数打印输出正常
    在这里插入图片描述
  4. 注意勾选浮点数输出,编译后FLASH会明显增大了,在不需要浮点数输出或最后调试完成需要关闭
    勾选浮点数输出
    在这里插入图片描述
    不勾选浮点数输出
    在这里插入图片描述

4 工程链接

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
en.stm32cubemx-win-v6-9-1是一个针对STMicroelectronics的STM32微控制器系列的软件工具。这个软件工具可在Windows操作系统上使用,其版本号为6.9.1。 STM32微控制器系列是STMicroelectronics推出的一种低功耗、高性能的微控制器芯片系列。这些微控制器芯片广泛用于嵌入式系统、物联网设备、工业自动化以及各种电子产品中。STM32微控制器系列有多个不同的型号和系列,每个型号都有不同的功能和性能特点。 en.stm32cubemx-win-v6-9-1是用于STM32微控制器系列的软件工具。它具有通过图形化界面进行配置和生成代码的功能,使得开发人员可以更加方便地进行STM32微控制器的软件开发。通过这个软件工具,开发人员可以选择不同的模块、外设和功能,然后生成相应的初始化代码。这个软件工具还可以提供一些自动生成的模版,使得开发人员可以快速开始开发。 除了代码生成外,en.stm32cubemx-win-v6-9-1还提供了一些其他功能。例如,它可以通过图形化界面配置时钟树、引脚映射、中断优先级等。此外,该软件工具还可以集成其他开发环境,例如Keil或IAR,以便更直接地进行代码编辑和编译。 总而言之,en.stm32cubemx-win-v6-9-1是一个用于STM32微控制器系列的软件工具,它提供了图形化界面配置和生成代码的功能,帮助开发人员更方便地进行STM32微控制器的软件开发。它是一个很有用的工具,可以提高开发效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值