#include "stm32f4xx.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "delay.h"
#include "tim.h"
#include "pwm.h"
#include "usart.h"
#include "sys.h"
#include "dht11.h"
#include "infrared.h"
#include "iwdg.h"
#include "rtc.h"
u8 buffer[64] = {0};
u8 rx_buffer[64] = {0};
u8 count = 0, rx_i = 0;
u8 rx_flag = 0; //接受标志位,rx_flag = 表示数据帧完毕
void USART1_IRQHandler(void)
{
//判断接收标志位是否为1
if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
//清空接受标志位
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
//接受数据
buffer[count++] = USART_ReceiveData(USART1);
//判断数据是否为':',如果是':'数据帧结束
if(buffer[count-1] == ':')
{
//数据赋值到rx_buffer,并过滤帧尾
for(rx_i=0; rx_i<(count-1); rx_i++)
{
rx_buffer[rx_i] = buffer[rx_i];
}
//清空数组
memset(buffer, 0, sizeof(buffer));
//标志位置1
rx_flag = 1;
//下一帧数据从buffer[0]开始接受
count = 0;
}
}
}
void USART2_IRQHandler(void)
{
u8 data;
//判断接收标志位是否为1
if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
{
//清空接受标志位
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
//接受数据
buffer[count++] = USART_ReceiveData(USART2);
//判断数据是否为':',如果是':'数据帧结束
if(buffer[count-1] == ':')
{
//数据赋值到rx_buffer,并过滤帧尾
for(rx_i=0; rx_i<(count-1); rx_i++)
{
rx_buffer[rx_i] = buffer[rx_i];
}
//清空数组
memset(buffer, 0, sizeof(buffer));
//标志位置1
rx_flag = 1;
//下一帧数据从buffer[0]开始接受
count = 0;
}
}
}
void USART3_IRQHandler(void)
{
u8 data;
//判断接收标志位是否为1
if(USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
{
//清空接受标志位
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
//接受数据
buffer[count++] = USART_ReceiveData(USART3);
//判断数据是否为':',如果是':'数据帧结束
if(buffer[count-1] == ':')
{
//数据赋值到rx_buffer,并过滤帧尾
for(rx_i=0; rx_i<(count-1); rx_i++)
{
rx_buffer[rx_i] = buffer[rx_i];
}
//清空数组
memset(buffer, 0, sizeof(buffer));
//标志位置1
rx_flag = 1;
//下一帧数据从buffer[0]开始接受
count = 0;
}
}
}
int main(void)
{
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
//设置NVIC分组(一个工程只能设置一个分组)
//第二分组;抢占优先组取值范围:0~3 响应先组取值范围:0~3
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
// Led_Init();
Delay_Init();
Usart1_Init(115200);
Rtc_Tim_Init();
while(1)
{
//获取日期
RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
printf("日期:%d-%d-%d 星期:%d\r\n",RTC_DateStruct.RTC_Year,
RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date,RTC_DateStruct.RTC_WeekDay);
//获取时间
RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
printf("时间:%d:%d:%d\r\n",RTC_TimeStruct.RTC_Hours,
RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
delay_s(1);
}
}
|