日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于stm32f103zet6的DS1302学习

發(fā)布時間:2025/6/15 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于stm32f103zet6的DS1302学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

由于硬件出了問題,也就是外部低速晶振沒用,震不起來,然后查看了網(wǎng)上的帖子,STM32的RTC果然口碑不怎么樣,所以果斷換DS1302,在移植的過程中還算順利,記錄下來吧,也算對自己的總結(jié)吧!

1、所謂的DS1302


這里面也指明了簡單的SPI協(xié)議

然后就直接上代碼了,注釋很詳細(xì)的!基本實(shí)現(xiàn)單行注釋

1、主函數(shù)main

[html]?view plaincopy
  • #include?"stm32f10x.h"??????
  • #include?"SysTick.h"??
  • #include?"Delay.h"??
  • #include?"Usart.h"??
  • #include?"stdio.h"??
  • #include?"DS1302.h"??
  • /*******由于沒有做外設(shè)測試的程序是:按鍵PA0僅一個LED燈??????????????????????????????????******/??
  • /*******由于沒有做外設(shè)測試的程序是:串口采用的是PA9->(T<->T),PA9->(R<->R)*****/??
  • /*******由于沒有做外設(shè)測試的程序是: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};??
  • ????//初始化系統(tǒng)定時器??
  • ????SysTick_Init();??
  • ????USART1_Config();??
  • ????ds1302_GPIO_Configuration();????????????????????????????????????????????????????//一定別忘記了配置GPIO??
  • ????printf("\r\n?("__DATE__?"?-?"?__TIME__?")?\r\n");??
  • ????//ds1302_init(write,time);??????????????????????????????????????????????????????//設(shè)置1302的初始時間??
  • ????ds1302_data(read);??
  • ????while(1);???????????????????????????????????????????????????????????????????????????????????????????//這個得加,不然的話會有尾巴是亂碼!!!??
  • }??
  • [html]?view plaincopy
  • /*******************************************************************************??
  • **?文件名稱?:?ds1302.c??
  • **?編譯環(huán)境?:?RealView?MDK-ARM?4.53??
  • **?文件作者?:?????
  • **?功能說明?:?ds1302相關(guān)函數(shù)定義??
  • **?軟件協(xié)議?:模擬SPI協(xié)議??
  • **?簡介???????????:clk上升沿發(fā)送數(shù)據(jù),clk下降沿接收數(shù)據(jù)??
  • ????????????????????????: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配置為開漏模式,此模式下能夠?qū)崿F(xiàn)真正的雙向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)????????????????????????????????????????????//寫一個字節(jié)的數(shù)據(jù)sck上升沿寫數(shù)據(jù)??
  • {??
  • ????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);??????????????????????????????????//發(fā)送一位數(shù)據(jù),clk上升沿,//ds1302clk=1??
  • ????????????dat?>>=?1;??
  • ????????????Delay_us(1);??
  • ????????}?????
  • ????}??
  • ??????
  • uint8_t?read_1302(uint8_t?add)??????????????????????????????????????????????//讀數(shù)據(jù)??
  • {??
  • ????uint8_t?i=0;??
  • ????uint8_t?Return_dat=0x00;??
  • ????GPIO_ResetBits(GPIOA,ds1302rst);????????????????????????????????????//ds1302rst=0;??
  • ????GPIO_ResetBits(GPIOA,ds1302clk);????????????????????????????????????????//ds1302clk=0;??
  • ????Delay_us(3);????????????????????????????????????????????????????????????????????????????????//略微延時2us??
  • ????GPIO_SetBits(GPIOA,ds1302rst);??????????????????????????????????????//ds1302rst=1;??
  • ????Delay_us(3);????????????????????????????????????????????????????????????????????????????????//時間要大約3us??
  • ????write_1302byte(add);????????????????????????????????????????????????????????????????//先寫寄存器的地址??
  • ????for(i=0;i<8;i++)??
  • ????{??
  • ????????GPIO_SetBits(GPIOA,ds1302clk);??????????????????????????????????????//ds1302clk=1;??
  • ????????Return_dat?>>=?1;??
  • ????????GPIO_ResetBits(GPIOA,ds1302clk);????????????????????????????????????//ds1302clk=0;//拉低時鐘線,以便于數(shù)據(jù)的讀入??
  • ????????if(GPIO_ReadInputDataBit(GPIOA,ds1302dat)==1)???????????//數(shù)據(jù)線此時為高電平??
  • ????????{Return_dat?=?Return_dat|0x80;}??
  • ????}??
  • ??????Delay_us(1);??
  • ??????GPIO_ResetBits(GPIOA,ds1302rst);????????????????????????????????//ds1302rst=0;釋放總線??
  • ??????return?Return_dat;??
  • ????}??
  • void?write_1302(uint8_t?add,uint8_t?dat)????????????????????????????//向指定寄存器寫入一個字節(jié)的數(shù)據(jù)??
  • {??
  • ????GPIO_ResetBits(GPIOA,ds1302rst);????????????????????????????????????????//只有在rst為高電平的時候才能進(jìn)行數(shù)據(jù)傳輸??
  • ????GPIO_ResetBits(GPIOA,ds1302clk);????????????????????????????????????????//只有clk為低電平的時候,rst才能被置為高電平??
  • ????//ds1302rst=0;??
  • ????//ds1302clk=0;??
  • ????Delay_us(1);????????????????????????????????????????????????????????????????????????????????//略微延時??
  • ????GPIO_SetBits(GPIOA,ds1302rst);??????????????????????????????????????????//clk?=?0之后,這里將rst拉高,準(zhǔn)備傳送數(shù)據(jù)??
  • ????//ds1302rst=1;??
  • ????Delay_us(2);????????????????????????????????????????????????????????????????????????????????//時間大約2us??
  • ????write_1302byte(add);????????????????????????????????????????????????????????????????//先發(fā)地址??
  • ????write_1302byte(dat);????????????????????????????????????????????????????????????????//然后發(fā)數(shù)據(jù)??
  • ????GPIO_ResetBits(GPIOA,ds1302rst);????????????????????????????????????????//這里釋放總線??
  • ????GPIO_ResetBits(GPIOA,ds1302clk);????????????????????????????????????????//拉低clk,以備下一次數(shù)據(jù)發(fā)送??
  • ????//ds1302clk=0;??
  • ????//ds1302rst=0;??
  • ????Delay_us(1);??
  • ??
  • }??
  • void?ds1302_init(uint8_t?*write,uint8_t?*time)??????????????//初始化1302??
  • {??
  • ????uint8_t?i=0,j=0;??
  • ????write_1302(0x8e,0x00);??????????????????????????????????????????????????????????//關(guān)閉寫保護(hù)??
  • ????for(i=0;i<7;i++)?????????????????????????????????????????????????????????????????????//十進(jìn)制轉(zhuǎn)BCD碼??
  • ????{??
  • ????????j=time[i]%10;???????????????????????????????????????????????????????????????????????????//個位數(shù)部分??
  • ????????time[i]=(time[i]/10)*16+j;????
  • ????}??
  • ????for(i=0;i<7;i++)?????????????????????????????????????????????????????????????????????//進(jìn)行對時??
  • ????{??
  • ????????write_1302(write[i],time[i]);???????????????????????????????????????????//在對應(yīng)寄存器上寫入對應(yīng)的十六進(jìn)制數(shù)據(jù)??
  • ??????????
  • ????}??
  • ????write_1302(0x8e,0x80);??????????????????????????????????????????????????????//打開寫保護(hù)??
  • }??
  • void?ds1302_data(uint8_t?*read)?????????????????????????????????????????????//處理數(shù)據(jù)并通過串口打印??
  • {??
  • ????uint8_t?i=0,g[7],time[7];??
  • //??static?uint8_t?s?=?1;??
  • ????for(i=0;i<7;i++)??
  • ????{??
  • ????????time[i]=read_1302(read[i]);?????????????????????????????????????????????//讀數(shù)據(jù)已經(jīng)完成??
  • ????}??
  • ????for(i=0;i<7;i++)??
  • ????{??
  • ????????g[i]=time[i]%16;????????????????????????????????????????????????????????????????????//秒個位數(shù)據(jù):BCD轉(zhuǎn)十進(jìn)制??
  • ????????time[i]=time[i]/16;?????????????????????????????????????????????????????????????//秒十位數(shù)據(jù)??
  • ????}??
  • ????//此時已轉(zhuǎn)換成10進(jìn)制數(shù),g[i]里面存放的是秒分時日月周年的各個位數(shù)據(jù)??
  • ????//而此時的time[i]存放的是十位數(shù)據(jù)??
  • ??????????????????????
  • ????????//if(s?!=?(time[0]+g[0]))??
  • ????printf("20%d%d年%d%d月%d%d日%d%d:%d%d:%d%d?星期%d\r\n",time[6],g[6],time[4],g[4],time[3],g[3],time[2],g[2],time[1],g[1],time[0],g[0],g[5]);??
  • ??????//s?=?time[0]+g[0];?????
  • }??
  • 就是這樣的簡單,然后給出一張效果圖

    總結(jié)

    以上是生活随笔為你收集整理的基于stm32f103zet6的DS1302学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人亚洲网 | 不卡视频在线观看免费 | 亚洲 欧美 日韩 国产综合 在线 | 四虎影 | 国产区第一页 | 国产毛片视频网站 | 五月天天 | 成人免费毛片xxx | 午夜在线一区二区 | 夜夜综合网 | 男人的天堂成人 | 男人午夜影院 | 久久精品无码av | 日韩经典第一页 | 久久精品97| 午夜电影一区二区 | 自拍视频第一页 | 日本黄色特级片 | 亚洲视频免费在线观看 | 在线观看特色大片免费网站 | 小珊的性放荡羞辱日记 | 久久视频这里只有精品 | 秘密的基地 | 精品在线一区 | 国产三区精品 | 亚洲天堂男人av | 亚洲人人爱 | 美女131爽爽爽做爰视频 | 在线视频 中文字幕 | 日本一区二区免费视频 | 精品亚洲国产成av人片传媒 | 久久mm| 国产亚洲制服 | 中文天堂资源在线 | 日批在线观看视频 | 国产不卡视频一区二区三区 | 国产精品变态另类虐交 | 欧美日韩激情视频在线观看 | 日韩欧美三区 | 国产伦精品一区二区三区免费迷 | 91桃色污 | 亚洲av成人片色在线观看高潮 | 国产wwwwwww | 国产又大又黄又爽 | 亚洲一区久久 | 亚洲超丰满肉感bbw 悠悠av | 成人夜间视频 | 丁香花婷婷 | 狠狠鲁狠狠干 | 麻豆视频在线免费看 | 国产精品资源网站 | 黄色片视频免费 | 日韩精品一区二区三 | 免费av小说 | 亚洲视频免费在线 | 久久艹国产精品 | 波多野结衣一级 | 久久99精品久久久久久园产越南 | 欧美国产日韩在线视频 | 老司机黄色片 | 黄色av大全| 国产精品视频观看 | 在线免费观看黄色片 | 日本福利片在线观看 | www.日日干| 4388成人网 | 好男人www日本 | 少女情窦初开的第4集在线观看 | 国产午夜一级一片免费播放 | 蜜桃视频在线入口www | 成人性生交视频免费观看 | 日韩免费播放 | 91爱爱爱爱 | 99精品在线免费视频 | 欧美日韩视频免费观看 | 91亚色| 久久人人爽人人爽人人 | 久草福利免费 | 亚洲欧美制服丝袜 | 国产精品调教视频 | 国产美女91 | 污免费视频 | 538国产精品一区二区免费视频 | www.操com| 国产经典自拍 | 久久91精品国产91久久小草 | 国产美女精品视频国产 | 草碰在线 | 国产精品一区二区麻豆 | 视频在线国产 | 久久精品香蕉视频 | 国产性―交―乱―色―情人 | 亚洲图片欧美另类 | 韩国av在线播放 | k8经典成人理伦片 | 午夜在线免费观看视频 | 手机av免费在线观看 | 色噜噜日韩精品欧美一区二区 | eeuss鲁丝片一区二区三区 |