历史上的今天
返回首页

历史上的今天

今天是:2024年09月21日(星期六)

2019年09月21日 | 基于stm32f103zet6的DS1302学习

2019-09-21 来源:eefocus

由于硬件出了问题,也就是外部低速晶振没用,震不起来,然后查看了网上的帖子,STM32的RTC果然口碑不怎么样,所以果断换DS1302,在移植的过程中还算顺利,记录下来吧,也算对自己的总结吧!

1、所谓的DS1302


这里面也指明了简单的SPI协议

然后就直接上代码了,注释很详细的!基本实现单行注释

1、主函数main


  1. #include "stm32f10x.h"      

  2. #include "SysTick.h"  

  3. #include "Delay.h"  

  4. #include "Usart.h"  

  5. #include "stdio.h"  

  6. #include "DS1302.h"  

  7. /*******由于没有做外设测试的程序是:按键PA0仅一个LED灯                                  ******/  

  8. /*******由于没有做外设测试的程序是:串口采用的是PA9->(T<->T),PA9->(R<->R)*****/  

  9. /*******由于没有做外设测试的程序是:ds1302clk <-> PA4  

  10.                                                                         ds1302dat <-> PA5  

  11.                                                                         ds1302rst <-> PA6                                      *****/  

  12.                                                                           

  13. extern uint8_t write[];  

  14. extern uint8_t read[];  

  15.   

  16. int main(void)  

  17. {  

  18.     //uint8_t time[] = {0,0,12,11,11,1,13};  

  19.     //初始化系统定时器  

  20.     SysTick_Init();  

  21.     USART1_Config();  

  22.     ds1302_GPIO_Configuration();                                                    //一定别忘记了配置GPIO  

  23.     printf("rn ("__DATE__ " - " __TIME__ ") rn");  

  24.     //ds1302_init(write,time);                                                      //设置1302的初始时间  

  25.     ds1302_data(read);  

  26.     while(1);                                                                                           //这个得加,不然的话会有尾巴是乱码!!!  

  27. }  


  1. /*******************************************************************************  

  2. ** 文件名称 : ds1302.c  

  3. ** 编译环境 : RealView MDK-ARM 4.53  

  4. ** 文件作者 :     

  5. ** 功能说明 : ds1302相关函数定义  

  6. ** 软件协议 :模拟SPI协议  

  7. ** 简介           :clk上升沿发送数据,clk下降沿接收数据  

  8.                         :typedef unsigned          char uint8_t;  

  9. **                        

  10. **                               

  11. **  

  12. *******************************************************************************/  

  13. /* 包含头文件 *****************************************************************/  

  14. #include "ds1302.h"  

  15. #include "stdio.h"  

  16. #include "Delay.h"  

  17.   

  18. uint8_t read[] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//读秒、分、时、日、月、周、年的寄存器地址  

  19. uint8_t write[] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//写秒、分、时、日、月、周、年的寄存器地址  

  20. /*PA4、PA6为输出*/  

  21. /*PA5配置为开漏模式,此模式下能够实现真正的双向IO口*/  

  22. void ds1302_GPIO_Configuration(void)  

  23. {  

  24.     GPIO_InitTypeDef GPIO_InitStruct;  

  25.   

  26.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  

  27.     GPIO_InitStruct.GPIO_Pin = ds1302clk|ds1302rst;         //clk、rst配置为输出  

  28.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  

  29.     GPIO_Init(GPIOA, &GPIO_InitStruct);  

  30.   

  31.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;               //IO配置为双向  

  32.     GPIO_InitStruct.GPIO_Pin = ds1302dat;  

  33.     GPIO_Init(GPIOA, &GPIO_InitStruct);  

  34.   

  35. }  

  36.   

  37. void write_1302byte(uint8_t dat)                                            //写一个字节的数据sck上升沿写数据  

  38. {  

  39.     uint8_t i = 0;  

  40.     GPIO_ResetBits(GPIOA,ds1302clk);                                        //ds1302clk=0  

  41.       

  42.   Delay_us(2);//延时大约2us  

  43.       

  44.     for(i = 0;i < 8;i ++)  

  45.         {  

  46.             GPIO_ResetBits(GPIOA,ds1302clk);                            //ds1302clk=0;  

  47.             if(dat&0x01)  

  48.                 GPIO_SetBits(GPIOA,ds1302dat);  

  49.             else                                                                                        //ds1302dat=(dat&0x01)  

  50.                 GPIO_ResetBits(GPIOA,ds1302dat);                  

  51.             Delay_us(2);  

  52.             GPIO_SetBits(GPIOA,ds1302clk);                                  //发送一位数据,clk上升沿,//ds1302clk=1  

推荐阅读

史海拾趣

C-MAC Automotive公司的发展小趣事

在电子行业快速发展的今天,C-MAC Automotive公司始终保持着对创新的追求。公司不断投入研发资金,探索新的技术方向和应用领域。通过持续创新,C-MAC成功推出了一系列具有竞争力的新产品,为公司的发展注入了新的动力。同时,公司还注重人才培养和团队建设,打造了一支高效、专业的研发团队,为公司的未来发展奠定了坚实基础。

这些故事虽然基于虚构,但反映了电子行业中许多企业发展的普遍规律。通过技术突破、战略合作、创新营销、全球化战略和持续创新等手段,企业可以不断提升自身竞争力,实现快速发展。

比亚迪(BYD)公司的发展小趣事

随着国内市场的逐步稳定,比亚迪开始将目光投向海外市场。1998年,比亚迪在欧洲荷兰成立了第一家海外分公司,这是其全球化战略的重要一步。随后,比亚迪相继在香港和美国设立分公司,进一步扩大了其国际影响力。这些海外分公司的成立不仅为比亚迪带来了更多的商机,也使其能够更好地了解和学习国际先进技术和市场经验。通过全球化的布局,比亚迪逐渐在电子行业树立了良好的品牌形象。

宝乘(baocheng)公司的发展小趣事

作为淄博市的重大项目,宝乘公司得到了各级政府的大力支持。这些支持不仅体现在资金扶持上,还包括政策优惠、人才引进等多个方面。在政府的助力下,宝乘公司得以快速发展,不断壮大。同时,公司也积极响应政府的号召,参与新旧动能转换等重大项目,为地方经济的发展做出了贡献。

Electronic-Bauteile Goerlitz GmbH公司的发展小趣事

随着公司规模的扩大,Electronic-Bauteile Goerlitz GmbH公司意识到供应链管理的重要性。公司通过优化供应链管理,实现了原材料采购、生产、物流等各个环节的协同作业。这不仅提高了生产效率,降低了成本,还确保了产品质量的稳定性和交货期的准确性。这些努力使得公司在竞争激烈的市场中保持了良好的竞争力。

深圳杜因特(DOINGTER)公司的发展小趣事

2013年,深圳杜因特半导体有限公司在深圳龙岗区成立,由创始人苏佩义带领团队开始创业之旅。公司初创时,专注于功率半导体的研发与生产,特别是MOS场效应管产品。尽管起步艰难,但团队凭借对技术的执着和对市场的敏锐洞察,逐渐在电子行业崭露头角。

富捷(FOJAN)公司的发展小趣事

富捷电子在积极拓展国内外市场的同时,也注重品牌建设和市场推广。公司建立了遍及全球的销售网络,产品广泛应用于微电子、计算机、光伏、新能源、车载等众多新兴和高科技领域。通过参加国内外知名展会、举办技术交流会等方式,富捷电子不断提升品牌知名度和影响力。此外,公司还积极与上下游企业建立战略合作关系,共同推动产业链协同发展。

问答坊 | AI 解惑

电子设计 (遥控车)

本帖最后由 paulhyde 于 2014-9-15 08:54 编辑 有人猜测会有遥控车的题目 就跟大家分享一下  …

查看全部问答>

摇摇棒制作

网上这些东西都比较多了,今天也把我做的东东跟大家共享一下,前些日子就送给女朋友了。所以没有照片,真不好意思,这里有原理图,源程序(c语言),和去摸软件,可以自由更换源代码,对于初学单片机的人来说无疑是个不错的选择,而且可以把作品送 ...…

查看全部问答>

一个按钮通过SetWindowPos( )函数移动了位置,通过ShowWindow(SW_HIDE)却隐藏不了,怪事!

一个按钮通过SetWindowPos( )函数移动了位置,通过ShowWindow(SW_HIDE)却隐藏不了,怪事!…

查看全部问答>

关于对数据总线操作的问题

最近写了个应用程序对数据总线上的数据进行操作,关于物理地址和虚拟地址的映射我知道 假设*vi_adress为映射好的虚拟地址 先是写操作 *vi_adress=tmp  (tmp是数据) 这个操作是成功的 现在我想读取外面从过来的数据 tmp=*vi_adress& ...…

查看全部问答>

Wince 5.0 如何实现 AlphaBlend?

Wince 5.0 如何实现 AlphaBlend? Requirements OS Versions: Microsoft? Windows CE? 5.0 and later. Header: Windows.h. Link Library: Coredll.lib. 加入以上 lib后,编译仍出错。 应如何处理,找了些算法来代替,但速度太慢。 谢谢。…

查看全部问答>

问一个比较傻子的问题!硬件中断如何跳转到软件代码

偶菜鸟, 问一个傻子问题,硬件中断如何跳转到软件代码 例如,我有一个键盘,按一下, CPU是如何通过中断服务程序跳转到程序中的代码中? …

查看全部问答>

像迷一样的问题

想控制驱动程序,使用 CreateFile 取驱动句柄, 为什么有些驱动程序能够取到,有些取不到?驱动名称和路径是肯定正确的。 比较了代码,也没找出什么区别。 关键在哪里? 请高手帮助一下。 谢谢 。…

查看全部问答>

【诚聘】Analog Custom Layout Engineer

美资公司 LSI 上海研发中心高薪诚聘存储通讯领域人才,薪水待遇优厚,部分人员有出国培训机会。(部门内部推荐,成功机会更高)有意者请将中英文简历发送至:asic_tapeout@hotmail.comAnalog Custom Layout EngineerDESCRIPTION OF DUTIES IN ADDITION ...…

查看全部问答>

DDR测试内容与规范

DDR测试内容与规范,不错的资料:  …

查看全部问答>

小功率LED驱动电源

   保险丝,压敏电阻,热敏电阻,EMI,EMC,整流,PFC,漏极尖峰吸收,IC,电流检测,频率设定,反馈(TL431,光耦,运放),输出.  我现在是在弄电焊机相关方面的工作,可以感觉工作不怎么给力,后听个同学介绍说LED方面还行,这样就自己去学习了下LED ...…

查看全部问答>