基于STM32的简单电子表的实现

STM32的简易电子表

前言:最近在做嵌入式选修课设,基于STM32F103C8Tx实现电子表的简单模拟。由于没有芯片,老师只是要求我们用Proteus进行仿真(Proteus仿真有点不准确),课程结束以后特地写一篇博客来记录自己的想法

  1. 首先我们需要设计原理图,原理图共有两部分,一部分是电源的设计,另一部分是数码管以及按键的电路设计

对于电源部分我们需要对VCC进行降压处理(STM32芯片正常工作电压为3.3V),这里用到了BUCK电路,有需要了解的可以点击了解BUCK电路
stm32F103c8
在这里插入图片描述
下面是数码管以及按键的原理图

在这里插入图片描述
在这里插入图片描述
板子实例(布线不是很好)
在这里插入图片描述

2. 接下来我们可以利用Cube生成代码,时间的更新我们采用定时器中断即可

1.打开STM32CubeMX,新建项目选择STM32F103C8Tx
2.设置RCC时钟源
在这里插入图片描述
3.设置GPIO引脚
在这里插入图片描述在这里插入图片描述
4.配置定时器,这里选择的是TIM3(有关定时器的知识读者可自行了解)
在这里插入图片描述
5.配置时钟树
在这里插入图片描述
6.生成代码并用keil打开

3. 编写代码

1.void SystemClock_Config(void)

void SystemClock_Config(void)
{
   
    HAL_StatusTypeDef ret = HAL_OK;
    RCC_OscInitTypeDef RCC_OscInitStructure; 
    RCC_ClkInitTypeDef RCC_ClkInitStructure;
    
    RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE;    	//时钟源为HSE
	RCC_OscInitStructure.HSEState=RCC_HSE_ON;                      	//打开HSE
	RCC_OscInitStructure.HSEPredivValue=RCC_HSE_PREDIV_DIV1;		    //HSE预分频
	RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON;										//打开PLL
    RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSE;						//PLL时钟源选择HSE
    RCC_OscInitStructure.PLL.PLLMUL=RCC_PLL_MUL9; 									//主PLL倍频因子
    ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);										//初始化
	
    if(ret!=HAL_OK) while(1);
    
    //选中PLL作为系统时钟源并且配置HCLK,PCLK1和PCLK2
    RCC_ClkInitStructure.ClockType=(RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2);
    RCC_ClkInitStructure.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;			//设置系统时钟时钟源为PLL
    RCC_ClkInitStructure.AHBCLKDivider=RCC_SYSCLK_DIV1;							//AHB分频系数为1
    RCC_ClkInitStructure.APB1CLKDivider=RCC_HCLK_DIV2; 							//APB1分频系数为2
    RCC_ClkInitStructure.APB2CLKDivider=RCC_HCLK_DIV1; 							//APB2分频系数为1
    ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_2);	//同时设置FLASH延时周期
		
    if(ret!=HAL_OK) while(1);
		
}

2.void GPIO_INIT(void)

void void GPIO_INIT(void)
{
   
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_GPIOA_CLK_ENABLE();           									//开启GPIOA时钟
	__HAL_RCC_GPIOB_CLK_ENABLE();           									//开启GPIOB时钟
	
    GPIO_Initure.Pin=K4_Pin|K2_Pin;														//K4_Pin|K2_Pin
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  									//推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          									//上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;    	 									//高速
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
	
	GPIO_Initure.Pin=K1_Pin;																	//K3_Pin|K1_Pin
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  									//推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          									//上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;    	 									//高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
		
	GPIO_Initure.Pin=K3_Pin;																	//K3_Pin|K1_Pin
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  									//推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          									//上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;    	 									//高速
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
		
	GPIO_Initure.Pin=LIGHTS_Pin|G_Pin|B_Pin|C_Pin |E_Pin|D_Pin; 	//LIGHTS_Pin|G_Pin|B_Pin|C_Pin |E_Pin|D_Pin
	GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  											//推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          											//上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;    	 
  • 18
    点赞
  • 166
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值