初级会员

- 积分
- 129
- 金钱
- 129
- 注册时间
- 2017-2-13
- 在线时间
- 23 小时
|

楼主 |
发表于 2017-4-12 15:11:47
|
显示全部楼层
#include "STM32F30x.h"
#include "rtc.h"
#include "usart.h"
#include "stdio.h"
unsigned int TimingDelay;
unsigned char i=0,j=0;
unsigned char flag=0,flag1=0;
unsigned char showtime[50] = {0};
unsigned char showdate[50] = {0};
extern RTC_DateTypeDef RTC_DateStructure;
extern RTC_TimeTypeDef RTC_TimeStructure;
void GPIO_Config(void);
//void Delay(__IO uint32_t nTime);
int main(void)
{
SysTick_Config(72000);
RTC_Config();
USART_Config();
while (1)
{
/* Get the RTC current Time */
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
/* Get the RTC current Date */
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
/* Display time Format : hh:mm:ss */
sprintf((char*)showtime,"%.2d:%.2d:%.2d",RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds);
/* Display date Format : mm-dd-yy */
sprintf((char*)showdate,"%.2d-%.2d-%.2d",RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Date, 2000 + RTC_DateStructure.RTC_Year);
PrintCom(USART1, "当前时间为:\r\n");
PrintCom(USART1, showdate);
PrintCom(USART1, "\r\n");
PrintCom(USART1, showtime);
PrintCom(USART1, "\r\n");
//
// }
//
// if(flag1==1)
// {
// flag1=0;
// /* Get the RTC current Time */
// RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
// /* Get the RTC current Date */
// RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
// /* Display time Format : hh:mm:ss */
// sprintf((char*)showtime,"%.2d:%.2d:%.2d",RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds);
// /* Display date Format : mm-dd-yy */
// sprintf((char*)showdate,"%.2d-%.2d-%.2d",RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Date, 2000 + RTC_DateStructure.RTC_Year);
//
// PrintCom(USART1, showtime);
// PrintCom(USART1, "\r\n");
// PrintCom(USART1, showdate);
// PrintCom(USART1, "\r\n");
// }
// }
//void Delay(__IO uint32_t nTime)//滴答定时精确定时
//{
// TimingDelay = nTime;
//
// while(TimingDelay != 0);
//}
}
}
RTC的代码
#include <stm32f30x.h>
#include "rtc.h"
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeTypeDef RTC_TimeStructure;
void RTC_Config(void)
{
RTC_InitTypeDef RTC_InitStructure;
RTC_AlarmTypeDef RTC_AlarmStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to Backup */
PWR_BackupAccessCmd(ENABLE);
/* Reset RTC Domain */
RCC_BackupResetCmd(ENABLE);
RCC_BackupResetCmd(DISABLE);
/* Allow access to RTC */
PWR_BackupAccessCmd(ENABLE);
/* Enable the LSE OSC */
// RCC_LSEConfig(RCC_LSE_ON);
/* Enable the LSI OSC */
RCC_LSICmd(ENABLE);
/* Wait till LSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
{}
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
/* Calendar Configuration */
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0x120; /* (37KHz / 128) - 1 = 0x120*/
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
/* Set the alarm 01h:00min:04s */
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = 0x10;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = 0x10;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = 0x00;
RTC_AlarmStructure.RTC_AlarmDateWeekDay = RTC_Weekday_Monday;
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_Weekday_Monday;
/* Alarm mask hour, min and second:default Alarm generation each 1s */
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_All;
RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure);
/* Enable RTC Alarm A Interrupt */
RTC_ITConfig(RTC_IT_ALRA, ENABLE);
/* Enable the alarm */
RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
/* Set the date: Wednesday February 5th 2014 */
RTC_DateStructure.RTC_Year = 14;
RTC_DateStructure.RTC_Month = RTC_Month_August;
RTC_DateStructure.RTC_Date = 0x25;
RTC_DateStructure.RTC_WeekDay = RTC_Weekday_Monday;
RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);
/* Set the time to 01h 00mn 00s AM */
RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
RTC_TimeStructure.RTC_Hours = 0x10;
RTC_TimeStructure.RTC_Minutes = 0x09;
RTC_TimeStructure.RTC_Seconds = 0x00;
RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);
RTC_ClearFlag(RTC_FLAG_ALRAF);
/* RTC Alarm A Interrupt Configuration */
/* EXTI configuration */
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* Enable the RTC Alarm Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); ;
}
串口的代码
#include <stm32f30x.h>
#include "usart.h"
void USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
//USARTx_TX GPIO_Mode_AF_PP
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA , &GPIO_InitStructure);
//USARTx_RX GPIO_Mode_AF_PP & IPU
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
}
void PrintCom(USART_TypeDef* USARTx, uint8_t *Data)
{
while(*Data)
{
USART_SendData(USARTx, *Data++);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
}
}
|
|