STM32H743XIH6+TIM6+USART1+HAL库 CubeMX配置

本文详细记录了如何在STM32H743XIH6开发板上配置CubeMX进行TIM6和USART1的设置,以实现每秒定时发送字符串,涉及RCC、GPIO、DEBUG配置,以及Keil5工程管理和代码编写过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

提示:这里可以添加本文要记录的大概内容:
最近开始调试别人设计的板子,而不是厂商卖的开发板,记录一下调试过程中遇到的问题以及解决办法。
本文要实现每间隔一秒通过USB转串口串口向PC发送一次字符串,芯片用的是STM32H743XIH6,采用的外设是TIM6和USART1,用一个LED显示定时器程序运行


提示:以下是本篇文章正文内容,下面案例可供参考

一、CubeMX配置

芯片选择STM32H743XIHx,TFBGA240封装

1.RCC配置

在这里插入图片描述
HSE高速时钟使用外部晶振,其他采用默认设置。
接下来配置时钟
在这里插入图片描述
由于TIM6为基本定时器,挂载在低速总线APB1上(除APB1以外都是高速,TIM7也是基本定时器也在APB1上)。这里配置的是240MHz,这关系到下一步TIM6定时器的参数配置。

2.TIM6配置

在这里插入图片描述
在Parameter Settings选项卡中设置Prescaler分频系数、Counter Mode计数模式和Counter Period计数周期。由于基本定时器只支持向上计数,所以Counter Mode只能选择Up。
本文用定时器中断来实现定时发送,则Prescaler分频系数和Counter Period计数周期的配置就关系到定时器中断的周期。计算方式如下:
周期=APB1 Timer Clocks/Prescaler/Counter Period
本文要求周期为1s,则周期T=240000000Hz/24000/10000=1s,在配置参数时应当-1,Prescaler=24000-1,Counter Period=10000-1。
在这里插入图片描述
然后记得勾选定时器中断。

3.USART1配置

在这里插入图片描述
记得勾选中断。
在这里插入图片描述
由于USART1有不同的复用引脚可以选择,所以要根据电路原理图设计选择对应的引脚,这里我们用的是PA9和PA10。引脚模式选择推挽输出(Altemate Function Push Pull),输出上拉(Pull-Up),最大输出速度为高(High)。
在这里插入图片描述
波特率设置为115200,数据位8,无校验,停止位1。

4.GPIO配置

设计的板子上有一个LED用来指示程序运行,对应的引脚为PA15。具体配置如下图:
在这里插入图片描述

5.DEBUG配置

在这里插入图片描述
采用SW模式下载和调试程序。

6.生成代码

部分设置如图所示。
在这里插入图片描述

在这里插入图片描述
最后点击GENERATE CODE生成代码。

二、Keil5

1.打开工程

在这里插入图片描述
在这里插入图片描述
打开工程后记得添加startup_stm32h743xx.s文件,否则会出错。
在这里插入图片描述

2.Target配置

打开Target配置选项卡。
在这里插入图片描述
在这里插入图片描述
上图红框处必须要勾选,否则串口重定向后无法使用printf函数,程序会卡死。
Output选项卡如下图所示:
在这里插入图片描述
红框中选项不勾选可以加快编译速度,勾选可以右键跳转到函数或变量定义处。
Debug选项卡如下图所示:
在这里插入图片描述
红框处选择自己使用的仿真器,我这用的是野火的DAP,点击Settings后如下图所示:
在这里插入图片描述
看见上图红框内容则表示电脑已识别对应仿真器。
Uitilities选项卡如下图所示:
在这里插入图片描述
需要关注的是红框内的选项,勾选Use Debug Driver。点击Settings后如下图所示:
在这里插入图片描述
勾选Reset and Run可使单片机程序下载完后立即开始运行,无需手动按下复位键。如中间的红框处没有显示,可点击Add按钮添加。

三、代码

1.main.c

在这里插入图片描述
可在此处添加自己的代码,这里我们暂时不需要。

2.usart.c

需要修改的代码主要有以下几处。
在这里插入图片描述
其次是使用printf函数打印字符串时需要重定向,程序如下:

/*发送字符串*/
void Usart_SendString( USART_TypeDef * pUSARTx, uint8_t *str)
{
	unsigned int k=0;
  do 
  {
      HAL_UART_Transmit( &huart1,(uint8_t *)(str + k) ,1,1000);
      k++;
  } while(*(str + k)!='\0');
  
}
///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
	/* 发送一个字节数据到串口DEBUG_USART */
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);	
	
	return (ch);
}

///重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
		
	int ch;
	HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000);	
	return (ch);
}

在这里插入图片描述
别忘了添加头文件:

#include <stdio.h>

3.tim.c

需要修改的代码如下所示:
首先,启动定时器中断。
在这里插入图片描述
然后,添加中断回调函数。

/*周期回调函数,在定时器中断中调用*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM6)
	{
		HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin);//LED3引脚输出反转
        printf("ok!;\n");
	}
}

四、串口定时发送测试

打开串口助手查看结果,每隔1s发送一次字符串。
在这里插入图片描述
LED闪烁。


总结

头一次写文章,记录一下遇到的问题和解决办法,省的自己弄完过段时间就全忘了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值