草庐IT

蓝桥杯嵌入式——RTC

小明在考研 2023-07-30 原文

工程文件下载链接,无需积分即可下载

RTC部分直接在上部分代码里面增加

1.配置STM32CubeMX工程文件

(1).使能RTC时钟

(2),采用外部时钟,配置一秒产生一次中断

(3).时间的话随便设置一个就行

 (4).生成keil工程文件

2.配置keil工程文件

(1).添加.c  .h文件,过程省略

(2).转移资源.c  .h文件里面的内容  

(3).去路径

 #include "main.h"  ——》#include "stm32g4xx_hal.h" ——》#include "stm32g4xx_hal_conf.h"

打开RTC使能

3.在main.c编写功能函数

(1).RTC初始化

(2).定义日期、时间结构体、定义八位变量秒(注意结构体类型需要记忆)

(3). 编写获取年月日时分秒的函数 并通过LCD屏幕显示出来(此处注意,需要两个结构体都获取时间,单独获取一个会出现问题)

 

#include "stdio.h"
#include "main.h"
#include "led\bsp_led.h"
#include "key\bsp_key.h"
#include "lcd\bsp_lcd.h"
#include "adc\bsp_adc.h"
#include "basic_tim6\bsp_basic_tim6.h"
#include "rtc\bsp_rtc.h"



__IO uint32_t uwTick_key_set_point = 0;
unsigned char uckey_valu,uckey_old,uckey_down,uckey_up;


__IO uint32_t uwTick_lcd_set_point = 0;
unsigned int i = 0;
unsigned char Lcd_Dis_String[22];


RTC_DateTypeDef Y_M_D_Date;
RTC_TimeTypeDef H_M_S_Time;
uint8_t Second;

void SystemClock_Config(void);
void KEY_Proc(void);
void LCD_Disp(void);

int main(void)
{
	
  HAL_Init();
	
  SystemClock_Config();

  LED_Init();
	KEY_Init();
	LCD_Init();
	ADC1_Init();
	ADC2_Init();
	LCD_Clear(White);
	TIM6_Init();
	
	RTC_Init();
	
	HAL_TIM_Base_Start_IT(&htim6);
  while (1)
  {
		
		KEY_Proc();
		LCD_Disp();
  }

}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	i++;
	HAL_TIM_Base_Start_IT(&htim6);
}
void LCD_Disp(void)
{
	if (uwTick - uwTick_lcd_set_point < 200) return;

	uwTick_lcd_set_point = uwTick;
	//i++;
	sprintf((char *)Lcd_Dis_String,"The time is %d",i);
	LCD_DisplayStringLine(Line0, Lcd_Dis_String);
	
	sprintf((char *)Lcd_Dis_String,"ADC1:%5.3f",getADC1()*3.3/4096);
	LCD_DisplayStringLine(Line1, Lcd_Dis_String);
	sprintf((char *)Lcd_Dis_String,"ADC2:%5.3f",getADC2()*3.3/4096);
	LCD_DisplayStringLine(Line2, Lcd_Dis_String);
	
	//RTC有关
	HAL_RTC_GetTime(&hrtc,&H_M_S_Time,RTC_FORMAT_BIN);
	HAL_RTC_GetDate(&hrtc,&Y_M_D_Date,RTC_FORMAT_BIN);
	
	sprintf((char *)Lcd_Dis_String,"DATE:%d/%d/%d",Y_M_D_Date.Year,Y_M_D_Date.Month,Y_M_D_Date.Date);
	LCD_DisplayStringLine(Line3, Lcd_Dis_String);	
	sprintf((char *)Lcd_Dis_String,"TIME:%d:%d:%d",H_M_S_Time.Hours,H_M_S_Time.Minutes,H_M_S_Time.Seconds);
	LCD_DisplayStringLine(Line4, Lcd_Dis_String);	
	
	
	
	
}

void KEY_Proc(void)
{

	
	if (uwTick - uwTick_key_set_point < 200) return;

	uwTick_key_set_point = uwTick;
	uckey_valu = KEY_Scan();
	
	uckey_down = uckey_valu & (uckey_old^uckey_valu);
	uckey_up = ~uckey_valu & (uckey_old^uckey_valu);
	uckey_old = uckey_valu;

	if (uckey_down == 1)
	{
		LED_Disp(0x11);
		
	}
	if (uckey_down == 2)
	{
		LED_Disp(0xff);
		
	}
	if (uckey_down == 3)
	{
		LED_Disp(0x44);
		
	}
	if (uckey_down == 4)
	{
		LED_Disp(0x00);
		
	}
}


void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


  HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV3;
  RCC_OscInitStruct.PLL.PLLN = 20;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    Error_Handler();
  }
}


void Error_Handler(void)
{

  __disable_irq();
  while (1)
  {
  }

}

#ifdef  USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

 工程代码下载链接放在文章开始,可以免费下载

有关蓝桥杯嵌入式——RTC的更多相关文章

  1. 蓝桥杯备赛(二) - 2

    目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言:  在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC  已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析  这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy

  2. 蓝桥杯C/C++VIP试题每日一练之报时助手 - 2

    ?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是:  如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。  如果m不为0,则将时读出来,然后将分读出来,如5

  3. ruby-on-rails - 如何在 RoR 中使用 content_tag 嵌入标签? - 2

    我有这个可以为我生成一个超链接:我希望它显示在td标签中,所以我想使用这个content_tag来帮助我:"example")%>我想要我的td中的超链接,所以我有这样的东西:,:class=>"example")%>但是我收到语法错误,我该怎么办? 最佳答案 内联:'example')%>或block形式:'example')do%> 关于ruby-on-rails-如何在RoR中使用content_tag嵌入标签?,我们在StackOverflow上找到一个类似的问题:

  4. 十四届蓝桥青少组模拟赛Python-20221108 - 2

    十四届蓝桥青少组模拟赛Python-20221108T1.二进制位数十进制整数2在十进制中是1位数,在二进制中对应10,是2位数。十进制整数22在十进制中是2位数,在二进制中对应10110,是5位数。请问十进制整数2022在二进制中是几位数?print(len(bin(2022))-2)#运行结果:11T2.晨跑小蓝每周六、周日都晨跑,每月的1、11、21、31日也晨跑。其它时间不晨跑。已知2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?#样例代码1ls=[0,31,28,31,30,31,30,31,31,30,31,30,31]ans=0k=6foriinrange(1,13)

  5. 蓝桥杯 stm32 MCP4017 - 2

    本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B&#

  6. [蓝桥杯单片机]学习笔记——串口通信的基本原理与应用 - 2

    目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式  2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器​编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置  3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一

  7. ruby - Ruby 是否有任何可嵌入的键值存储? - 2

    我需要快速可靠的Ruby键值存储。有没有类似的东西?要求它完全在Ruby进程内运行,不需要任何外部进程。它可能在显式磁盘刷新的内存中。它需要具有最小的键值检索时间,写入时间可能不太好。存储的数据量不会很糟糕,大约几十万个键,每个键都有~1kb的文本值。 最佳答案 事实证明,对我来说最好的选择是使用纯Hash和Marshal将其序列化到磁盘。对于那么多的对象,YAML肯定太慢了。感谢@ian-armit加强了我对核心Ruby库的信任。 关于ruby-Ruby是否有任何可嵌入的键值存储?,我

  8. ruby - mongoid 文档 to_json 包括所有嵌入的文档,每个文档都没有 ':include' - 2

    给定一个任意的mongoid文档,我如何将其转换为JSON并包含任何嵌入式结构,而不是在我的to_json语句中特别包含这些结构。例如:#!/usr/bin/envrubyrequire'mongoid'require'json'require'pp'classDocincludeMongoid::DocumentincludeMongoid::Timestampsfield:doc_specific_info,type:Stringembeds_many:personsendclassPersonincludeMongoid::Documentfield:role,type:Stri

  9. ruby - Mongoid:将嵌入式文档转换为引用/自己的集合 - 2

    我需要将嵌入式文档转换成它自己的集合,以便它可以从另一个集合中引用。假设我有一个Parent嵌入了许多Child。我在想一些事情:Parent.all.eachdo|p|p.childs.all.eachdo|c|c.raw_attributes['parent_id']=p.idendp.save!#willsaveparentandcascadepersistallchildsontotheirowncollend这是一个选项吗?理想情况下,我会在控制台中运行它,我只会将mongoid映射从embed_*更改为has_*,因此我不需要更改其余代码或使用另一个集合作为暂存。

  10. ruby - 在 HTML 中嵌入 Ruby 代码? - 2

    在PHP中,可以这样做:">是否可以像使用或不使用Rails那样将Ruby嵌入到HTML中? 最佳答案 您将需要使用像Ruby模板(ERB)这样的模板引擎。这是一个example.Rails使用ERB,因此您可以在每个模板中轻松地执行此操作。 关于ruby-在HTML中嵌入Ruby代码?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3486664/

随机推荐