[nucleo-H7A3ZI-Q教程] 1、点亮一个皮皮灯

在这里插入图片描述

前言

很感谢ST中文社区让我体验H7A3ZI-Q这块开发板,但是由于个人原因拖到现在才开始编写这篇体验报告,也很感谢ST中文社区的耐心和支持!!!

本文不是入门教程,更多是个人体验笔记和交流,如果有不懂的地方,可以自行查阅资料或者上B站看视频学习哦。

由于作者技术水平有限,本文可能会有错误的地方,感谢大家热情指出和交流。

介绍:

​ 一般来说,单片机学习都是从点亮一个灯开始的,也是一个熟悉编译环境和入门的过程。所以第一个小试验就是点灯,但是单纯的亮一个灯又比较无趣,所以我们可以让灯无序的亮起,然后亮随机的时间,我简称这个为“皮皮灯”。

使用单片机实现上面的功能可能会经过以下流程:

  1. 查看原理图,确定单片机引脚,引脚输入还是输出,输出按哪种模式;
  2. 使用cubeMX工具自动配置时钟和引脚,并生成代码工程;
  3. 规划程序流程图,确定需要现实的函数功能;
  4. 编写自己的应用代码,实现“皮皮灯”的功能。

本次实验按照以上步骤来编写。

硬件设计

在这里插入图片描述

如图所示,PB0,PE1,PB14对应不同颜色的LED灯,故确定本次实验需要配置这三个IO。再者此三个IO是通过NPN三极管控制LED灯的,当IO输出高电平,三极管即导通,电流能通过三极管ec二级流入地,LED导通,并点亮,故也能确定输出高电平点亮LED灯,反之输出低电平熄灭LED灯。

使用CubeMX创建工程并生成代码

因为是基于nucleo-H7A3ZI-Q开发板开发的,所以可以直接选择板来创建工程
在这里插入图片描述

创建完工程看视图,可以发现其实软件已经帮我们配置好LED灯和SWD等的引脚,因为本开发板是使用板载的ST-LINK V3来实现调试和串口共同一个USB口,十分方便,所以本实验无需修改既可选择直接生成代码,当然你可以自行修改看看有啥不同,比如调整时钟频率,IO速度等,看看会不会和本实验有不同的现象。
在这里插入图片描述
确定好时钟频率,和IO配置等后,选择IDE,并按生成代码【GENERATE CODE】
在这里插入图片描述

在这里插入图片描述

程序流程图

程序的流程比较简单,硬件和时钟初始化后(实际上,CubeMX已经帮你配置好了),在while循环里面,产生1-3范围内的随机数,点亮LED1~3(即R\G\B,按你的想法来定义),确定LED等后就翻转LED电平,延时随机数,我的代码为了好观察现象已经配置一个较短的时间了,延时结束后,再翻转LED电平。

在这里插入图片描述

应用代码

具体的应用需要读者自行编写,这里给出关键代码作为参考。

在给出代码前,读者需要了解stdlib库的srand() , rand()函数,这里给出参考文章:

https://c.biancheng.net/view/2043.html

产生1~3范围内的随机数:

/**
 * @brief  Create a random number of LED Port
 * @note   generate 1~3 number
 * @retval random number
 */
int Get_Random_LED_Port(void)
{
	uint8_t mode;
	srand(HAL_GetTick());
	mode=rand()%3+1;		
	mode=create_random_number();
		
	if((mode>0)&&(mode<4))
	{
		return mode;
	}
	else
	{
		return 0;
	}
}

可以看到以上代码是利用systick的来"播种"的,故可以通过改变""播种"来源,产生不同的“种子”。

产生随机数:

/**
 * @brief  Create a random number,range 
 * @note   generate random number
 * @retval random number
 */
int create_random_number(void)
{
  	uint32_t number = 0;
	srand((unsigned)HAL_GetTick());
  	number=rand();
	
  	return number;
}

LED随机延时后翻转

/**
 * @brief  Create a random number of LED Port
 * @note   generate 1~3 number
 * @retval random number
 */
void Random_Delay_LED_Toggle(GPIO_TypeDef *GPIO,uint16_t pin)
{
		
    HAL_GPIO_TogglePin(GPIO,pin);
	
		HAL_Delay(create_random_number()%401+150);
	
		HAL_GPIO_TogglePin(GPIO,pin);
}

主函数:

 while (1)
  {
	 
		switch(Get_Random_LED_Port())
		{
			case 1:
				Random_Delay_LED_Toggle(LD1_GPIO_Port,LD1_Pin);
			break;
			
			case 2:
				Random_Delay_LED_Toggle(LD2_GPIO_Port,LD2_Pin);
			break;
			
			case 3:
				Random_Delay_LED_Toggle(LD3_GPIO_Port,LD3_Pin);
			break;
		}
		
	}

实验现象

​ 编译工程烧录下载后,可以看到主板上三盏灯会随机的亮起

在这里插入图片描述
在这里插入图片描述

代码参考

有需要的话,可以在git上克隆工程下来看看实验现象

https://github.com/ALanStewart47/Project-H7A3ZI-Q/tree/main/Software/1.Led_Control

后续也附上csdn的下载链接(必须免积分):

自我修改

  1. 看看还有没其他方法产生随机数(H7系列有产生随机数的外设哦~)
  2. 用其他“播种”源来产生种子,看看会有什么不同。
  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值