stm32之24.RTC闹钟usart端口修改配置
(需要修改)
源码
while(1){//rtc唤醒事件if(g_rtc_wakeup_event){//获取日期RTC_GetDate(RTC_Format_BCD,&RTC_DateStructure);printf("20%02x/%02x/%02xWeek:%x\r\n",RTC_DateStructure.RTC_Year,RTC_DateStructure.RTC_Month,RTC_DateStructure.RTC_Date,RTC_DateStructure.RTC_WeekDay);//获取时间RTC_GetTime(RTC_Format_BCD,&RTC_TimeStructure);printf("%02x:%02x:%02x\r\n",RTC_TimeStructure.RTC_Hours,RTC_TimeStructure.RTC_Minutes,RTC_TimeStructure.RTC_Seconds); g_rtc_wakeup_event=0;}//rtc闹钟事件if(g_rtc_alarm_event){//模拟闹钟滴滴的声音,并闪烁LED灯if(time_sum<=6){time_cnt++;delay_ms(1); if(time_cnt==80){PFout(8)=1;PFout(10)=0;}else if(time_cnt==160){PFout(8)=0;PFout(10)=1;}else if(time_cnt==240){PFout(8)=1;PFout(10)=0;}else if(time_cnt==320){PFout(8)=0;PFout(10)=1;} else if(time_cnt>=1000){time_sum+=1;time_cnt=0;} }else{//清空标志位g_rtc_alarm_event=0;//清零蜂鸣器鸣响的总时间值time_sum=0;//清零1毫秒时间计数值time_cnt=0;} } //串口1事件if(g_usart1_event){//判断接收到的字符串为DATE SET//示例:DATE SET-2017-10-12-4\nif(strstr((char *)g_usart1_recv_buf,"DATE SET")){//以等号分割字符串strtok((char *)g_usart1_recv_buf,"-");//获取年p=strtok(NULL,"-");//2017-2000=17 i = atoi(p)-2000;//转换为16进制 17 ->0x17i= (i/10)*16+i%10;RTC_DateStructure.RTC_Year = i;//获取月p=strtok(NULL,"-");i=atoi(p);//转换为16进制i= (i/10)*16+i%10; RTC_DateStructure.RTC_Month=i;//获取日p=strtok(NULL,"-");i=atoi(p);//转换为16进制i= (i/10)*16+i%10; RTC_DateStructure.RTC_Date = i;//获取星期p=strtok(NULL,"-");i=atoi(p);//转换为16进制i= (i/10)*16+i%10; RTC_DateStructure.RTC_WeekDay = i;//设置日期RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);} //判断接收到的字符串为TIME SET//示例:TIME SET-14-20-10\nif(strstr((char *)g_usart1_recv_buf,"TIME SET")){//以等号分割字符串strtok((char *)g_usart1_recv_buf,"-");//获取时p=strtok(NULL,"-");i = atoi(p);//通过时,判断是AM还是PMif(i<12)RTC_TimeStructure.RTC_H12 = RTC_H12_AM;elseRTC_TimeStructure.RTC_H12 = RTC_H12_PM;//转换为16进制i= (i/10)*16+i%10;RTC_TimeStructure.RTC_Hours = i;//获取分p=strtok(NULL,"-");i = atoi(p); //转换为16进制i= (i/10)*16+i%10; RTC_TimeStructure.RTC_Minutes = i;//获取秒p=strtok(NULL,"-");i = atoi(p); //转换为16进制i= (i/10)*16+i%10; RTC_TimeStructure.RTC_Seconds = i; RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure); } //判断接收到的字符串为ALARM SET//示例:ALARM SET-14-20-10\nif(strstr((char *)g_usart1_recv_buf,"ALARM SET")){//以等号分割字符串strtok((char *)g_usart1_recv_buf,"-");//获取时p=strtok(NULL,"-");i = atoi(p);//通过时,判断是AM还是PMif(i<12)RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM;elseRTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_PM;//转换为16进制i= (i/10)*16+i%10;RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = i;//获取分p=strtok(NULL,"-");i = atoi(p); //转换为16进制i= (i/10)*16+i%10; RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = i;//获取秒p=strtok(NULL,"-");i = atoi(p); //转换为16进制i= (i/10)*16+i%10; RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = i; #if 1 //每天闹钟都会生效//RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31; //若RTC_AlarmDateWeekDaySel_Date,当前为日期,数值范围是0x1~0x31//若RTC_AlarmDateWeekDaySel_WeekDay,当前为星期几,数值范围:0x1~0x7//RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; //选择日期RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay; //屏蔽星期/日期,也就说闹钟每天都会生效#else //指定闹钟在某一天生效RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31; //若RTC_AlarmDateWeekDaySel_Date,当前为日期,数值范围是0x1~0x31//若RTC_AlarmDateWeekDaySel_WeekDay,当前为星期几,数值范围:0x1~0x7RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; //选择日期RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_None; //不屏蔽星期/日期,也就说闹钟会指定某一天会生效 #endif rtc_alarm_set(RTC_AlarmStructure); printf("%s ok,please wait rtc alarm...\r\n",g_usart1_recv_buf);}//清空串口1数据计数值g_usart1_recv_cnt = 0; //清空串口1接收数据事件g_usart1_event = 0;//清空串口1接收数据缓冲区memset((char *)g_usart1_recv_buf,0,sizeof g_usart1_recv_buf);}}
}void RTC_WKUP_IRQHandler(void)
{if(RTC_GetITStatus(RTC_IT_WUT) != RESET){g_rtc_wakeup_event = 1;RTC_ClearITPendingBit(RTC_IT_WUT);} EXTI_ClearITPendingBit(EXTI_Line22);
}void USART1_IRQHandler(void) //串口1中断服务程序
{if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断{//从串口1接收数据g_usart1_recv_buf[g_usart1_recv_cnt]=USART_ReceiveData(USART1); //记录多少个数据g_usart1_recv_cnt++;//检测到'#'符或接收的数据满的时候则发送数据if(g_usart1_recv_buf[g_usart1_recv_cnt-1]=='#' || g_usart1_recv_cnt>=(sizeof g_usart1_recv_buf)-1){g_usart1_event = 1;}}
} void RTC_Alarm_IRQHandler(void)
{if(RTC_GetITStatus(RTC_IT_ALRA) != RESET){//添加用户代码g_rtc_alarm_event=1;printf("rtc alarm trig\r\n");RTC_ClearITPendingBit(RTC_IT_ALRA);EXTI_ClearITPendingBit(EXTI_Line17);}
}
相关文章:
stm32之24.RTC闹钟usart端口修改配置
(需要修改) 源码 while(1){//rtc唤醒事件if(g_rtc_wakeup_event){//获取日期RTC_GetDate(RTC_Format_BCD,&RTC_DateStructure);printf("20%02x/%02x/%02xWeek:%x\r\n",RTC_DateStructure.RTC_Year,RTC_DateStructure.RTC_Month,RTC_Date…...
Spring Security无法调用接口错误解决
之前在写程序的时候,发现有个接口使用postmapping发送请求一直无法进行调用 PostMapping("/user/login")public ResponseResult login(User user){//登录,这里登录的时候需要传入用户名和密码System.out.println("user "user.toSt…...
运维Shell脚本小试牛刀(二)
运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 一: if---else.....fi 条件判断演示 [rootwww shelldic]# cat checkpass.sh #!/bin/bash - # # # # FILE: ch…...
飞天使-python的模块与包与装饰器
文章目录 模块与包标准模块第三方模块自定义模块 高级语法切片迭代器/生成器高级模式(闭包)高级模式(装饰器) 参考视频 模块与包 标准模块 import os print(os.getcwd())import sys print(sys.argv) print(sys.platform) print(…...
linux shell脚本利用 kill -0 检查进程是否存在
1.kill -0介绍 kill -0 pid用来检查进程是否存在,kill -0 pid解释(来自man kill):“If sig is 0, then no signal is sent, but error checking is still performed.”不发送任何信号,但是系统会进行错误检查。 kill -0 pid ->若存在&am…...
抖音视频删了怎么在电脑上找回来
【昨天整理电脑文件时,不小心将剪辑好的抖音作品误删了,但是回收站中找不回来了,这些视频是我花了很多心血制作的,如果没了真的十分可惜!希望大家能帮帮我,告诉我应该如何恢复这些文件。】 现在人们都喜欢…...
方面级别情感分析之四元组预测
情感四元组预测现有方法 阅读本文之前我们默认你对情感分析有基本的认识。 如果没有请阅读文章(https://tech.tcl.com/post/646efb5b4ba0e7a6a2da6476) 情感分析四元组预测涉及四个情感元素: 方面术语a,意见术语(也叫观点术语)o, 方面类别ac,…...
算法 稀疏数组 数组优化 数组压缩 二维数组转稀疏数组 算法合集(二)
1. 五子棋游戏,玩家对战一半停战休息,此时需要存储当前对战双方棋子信息 a. 采用二维数组存储: 0为空, 1代表黑棋 2代表蓝色棋子 b. 棋盘为11行,11列 > int [][] chessArray new int [11][11]; c. 出现的问题&am…...
交换机端口安全实验
文章目录 一、实验的背景与目的二、实验拓扑三、实验需求四、实验解法1. PC配置IP地址部分2. 在SW1上开启802.1X身份验证3. 创建一个用户身份验证的用户。用户名为wangdaye,密码为1234564.创建一个端口隔离组,实现三台PC无法互相访问 摘要: 本…...
c# 本地化中英文切换
区域 线程默认区域为当前计算机所选区域 设置当前区域: Thread.CurrentThread.CurrentCulture new CultureInfo(“zh-cn”); 获取当前区域: Console.WriteLine(Thread.CurrentThread.CurrentCulture.ToString()); 区域名称: “zh-cn” 中文…...
rabbitmq的优先级队列
在我们系统中有一个 订单催付 的场景,我们的客户在天猫下的订单 , 淘宝会及时将订单推送给我们,如果在用户设定的时间内未付款那么就会给用户推送一条短信提醒,很简单的一个功能对吧,但是,tianmao商家对我们来说&#…...
SpringBoot的Cacheable缓存注解
当我们的应用程序需要频繁地读取和写入数据时,为了提高应用程序的性能,我们通常会使用缓存技术。Spring Boot 提供了一种简单而强大的缓存框架,它可以轻松地将数据缓存到 Redis 中。 在 Spring Boot 中可以在方法上简单的加上注解实现缓存。…...
uniapp的 picker 日期时间选择器
效果图: dateTimePicker.js function withData(param){return param < 10 ? 0 param : param; } function getLoopArray(start,end){var start start || 0;var end end || 1;var array [];for (var i start; i < end; i) {array.push(withData(i))…...
element ui-Pagination
页面分为两个表格,当两边的表格数据量大时,分页样式就会受到影响,可以将跳转按钮的个数减少 页面分页代码如下 页面效果...
[开发|java] 将数组使用环境变量传递配置给typesafe配置示例
参考文献 如何将一组值作为环境变量提供给 typesafe/lightbend 配置 示例 假设需要如下配置要设置环境传递 whitlist [/oauth/render,/oauth/callback]需要使用如下的方式传递到 conf 文件中: whitlist [] whitlist.0 /oauth/render whitlist.1 /oauth/render...
MAC苹果电脑如何压缩rar文件?
作为开发者,想必主力开发机肯定都以苹果的MacBook为主,究其原因,为非是因为其对开发者的友好性,且可同时进行iOS 以及android的app开发,但是windows在这方面就欠缺太多了,虽然很多人说可以使用,…...
浅析编程中的语法糖
1、理解语法糖 1.1.什么是语法糖? 语法糖是一种编程语言的特性,它并不引入新功能,而是通过提供更简洁、易读的语法形式,使代码编写和理解变得更加轻松。它有点像是一种“甜蜜”的语法,让我们在不改变底层逻辑的情况下…...
【【萌新的STM32学习23----数据通信的基本类型】】
萌新的STM32学习23----数据通信的基本类型 数据通信的基本概念 数据通信方式可以分为串行通信,并行通信 串行通信: 数据逐位按顺序依次传输 并行: 数据各位通过多条线同时传输 串行通信: 传输效率低,抗干扰能力强&am…...
标准库STL容器使用值语义
C自学精简实践教程 目录(必读) 标准库STL的容器都是值语义的。 即,无法将一个变量放到容器里。容器里存放的只是我们放进去的变量的拷贝(副本)。 示例: #include <iostream> #include <vector> using namespace s…...
dockerfile 命令详解(三)
CMD 和 ENTRYPOINT 区别 CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令 FROM #基础镜像,一切从这里开始构建 MAINTAINER #…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
