历史上的今天
今天是:2024年09月21日(星期六)
2019年09月21日 | 基于stm32f103zet6的DS1302学习
2019-09-21 来源:eefocus
由于硬件出了问题,也就是外部低速晶振没用,震不起来,然后查看了网上的帖子,STM32的RTC果然口碑不怎么样,所以果断换DS1302,在移植的过程中还算顺利,记录下来吧,也算对自己的总结吧!
1、所谓的DS1302

这里面也指明了简单的SPI协议
然后就直接上代码了,注释很详细的!基本实现单行注释
1、主函数main
#include "stm32f10x.h"
#include "SysTick.h"
#include "Delay.h"
#include "Usart.h"
#include "stdio.h"
#include "DS1302.h"
/*******由于没有做外设测试的程序是:按键PA0仅一个LED灯 ******/
/*******由于没有做外设测试的程序是:串口采用的是PA9->(T<->T),PA9->(R<->R)*****/
/*******由于没有做外设测试的程序是:ds1302clk <-> PA4
ds1302dat <-> PA5
ds1302rst <-> PA6 *****/
extern uint8_t write[];
extern uint8_t read[];
int main(void)
{
//uint8_t time[] = {0,0,12,11,11,1,13};
//初始化系统定时器
SysTick_Init();
USART1_Config();
ds1302_GPIO_Configuration(); //一定别忘记了配置GPIO
printf("rn ("__DATE__ " - " __TIME__ ") rn");
//ds1302_init(write,time); //设置1302的初始时间
ds1302_data(read);
while(1); //这个得加,不然的话会有尾巴是乱码!!!
}
/*******************************************************************************
** 文件名称 : ds1302.c
** 编译环境 : RealView MDK-ARM 4.53
** 文件作者 :
** 功能说明 : ds1302相关函数定义
** 软件协议 :模拟SPI协议
** 简介 :clk上升沿发送数据,clk下降沿接收数据
:typedef unsigned char uint8_t;
**
**
**
*******************************************************************************/
/* 包含头文件 *****************************************************************/
#include "ds1302.h"
#include "stdio.h"
#include "Delay.h"
uint8_t read[] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//读秒、分、时、日、月、周、年的寄存器地址
uint8_t write[] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//写秒、分、时、日、月、周、年的寄存器地址
/*PA4、PA6为输出*/
/*PA5配置为开漏模式,此模式下能够实现真正的双向IO口*/
void ds1302_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = ds1302clk|ds1302rst; //clk、rst配置为输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //IO配置为双向
GPIO_InitStruct.GPIO_Pin = ds1302dat;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void write_1302byte(uint8_t dat) //写一个字节的数据sck上升沿写数据
{
uint8_t i = 0;
GPIO_ResetBits(GPIOA,ds1302clk); //ds1302clk=0
Delay_us(2);//延时大约2us
for(i = 0;i < 8;i ++)
{
GPIO_ResetBits(GPIOA,ds1302clk); //ds1302clk=0;
if(dat&0x01)
GPIO_SetBits(GPIOA,ds1302dat);
else //ds1302dat=(dat&0x01)
GPIO_ResetBits(GPIOA,ds1302dat);
Delay_us(2);
GPIO_SetBits(GPIOA,ds1302clk); //发送一位数据,clk上升沿,//ds1302clk=1
史海拾趣
|
一个按钮通过SetWindowPos( )函数移动了位置,通过ShowWindow(SW_HIDE)却隐藏不了,怪事! 一个按钮通过SetWindowPos( )函数移动了位置,通过ShowWindow(SW_HIDE)却隐藏不了,怪事!… 查看全部问答> |
|
最近写了个应用程序对数据总线上的数据进行操作,关于物理地址和虚拟地址的映射我知道 假设*vi_adress为映射好的虚拟地址 先是写操作 *vi_adress=tmp (tmp是数据) 这个操作是成功的 现在我想读取外面从过来的数据 tmp=*vi_adress& ...… 查看全部问答> |
|
Wince 5.0 如何实现 AlphaBlend? Requirements OS Versions: Microsoft? Windows CE? 5.0 and later. Header: Windows.h. Link Library: Coredll.lib. 加入以上 lib后,编译仍出错。 应如何处理,找了些算法来代替,但速度太慢。 谢谢。… 查看全部问答> |
|
偶菜鸟, 问一个傻子问题,硬件中断如何跳转到软件代码 例如,我有一个键盘,按一下, CPU是如何通过中断服务程序跳转到程序中的代码中? … 查看全部问答> |
|
【诚聘】Analog Custom Layout Engineer 美资公司 LSI 上海研发中心高薪诚聘存储通讯领域人才,薪水待遇优厚,部分人员有出国培训机会。(部门内部推荐,成功机会更高)有意者请将中英文简历发送至:asic_tapeout@hotmail.comAnalog Custom Layout EngineerDESCRIPTION OF DUTIES IN ADDITION ...… 查看全部问答> |
|
保险丝,压敏电阻,热敏电阻,EMI,EMC,整流,PFC,漏极尖峰吸收,IC,电流检测,频率设定,反馈(TL431,光耦,运放),输出. 我现在是在弄电焊机相关方面的工作,可以感觉工作不怎么给力,后听个同学介绍说LED方面还行,这样就自己去学习了下LED ...… 查看全部问答> |




