stm32操作时钟芯片ds1390
2015-07-18 13:02
381 查看
某个时间码定时装置需要精准的时间,因此选择了DS1390作为时钟芯片,因为他支持毫秒级别的时间校准。
平台:STM32F103T8u6+DS1390
以下是其源程序:
以上是初始化部分的,还有一个CE的初始化,没有写在上面。
以下是基本的操作函数
总结来说美信的时钟片子是很好用的,应用环境很多,而且种类也很多,如果用在工程项目上,简易一定要采用美信的片子,并且最好是原厂的片子,这样那个最稳定好用
平台:STM32F103T8u6+DS1390
以下是其源程序:
void SPI_init() { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_SPI1, ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_SPI1,ENABLE); /* Configure SPI1 pins: SCK, MISO and MOSI */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* SPI1 configuration */ SPI_Cmd(SPI1, DISABLE); //????????MODE SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//??SPI???????????:SPI?????????? SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//??SPI????:????SPI SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//??SPI?????:SPI????8???? SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;//??????????:????? SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;//??????????? SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;//NSS?????(NSS??)????(??SSI?)??:??NSS???SSI??? SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;//??????????:????????256 SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;//???????MSB???LSB???:?????MSB??? SPI_Init(SPI1,&SPI_InitStructure);//??SPI_InitStruct???????????SPIx??? /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE); }
以上是初始化部分的,还有一个CE的初始化,没有写在上面。
以下是基本的操作函数
#define SE_CS GPIO_SetBits(GPIOB,GPIO_Pin_1) #define CL_CS GPIO_ResetBits(GPIOB,GPIO_Pin_1) u8 datanow[4]; unsigned char SPIx_ReadWriteByte(unsigned char TxData)//SPIx ??????//TxData:??????//???:?????? { unsigned char retry=0; while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET) //?????SPI???????:???????? { retry++; if(retry>200) return 0; } SPI_I2S_SendData(SPI1,TxData);//????SPIx?????? retry=0; while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE) == RESET)//?????SPI???????:????????? { retry++; if(retry>200) return 0; } return SPI_I2S_ReceiveData(SPI1);//????SPIx??????? } void Writeds1930(u8 add,u8 dat) { CL_CS; SPIx_ReadWriteByte(add); SPIx_ReadWriteByte(dat); SE_CS; } u8 Readds1930(u8 add) { u8 re; CL_CS; SPIx_ReadWriteByte(add); re=SPIx_ReadWriteByte(0xff); SE_CS; return re; }以下是Init函数以及读时间函数和些时间函数,初始化函数中因为此处我是使用了DS1390的精准的定时功能,这里开启了闹钟,同时闹钟是1s产生一次的。
void InitDS1390() { //while(1) if(Readds1930(0x08)!=0x00) Writeds1930(0x88,0x00);//0 if(Readds1930(0x09)!=0x80) Writeds1930(0x89,0x80);//am1 if(Readds1930(0x0a)!=0x80) Writeds1930(0x8a,0x80);//am2 if(Readds1930(0x0b)!=0x80) Writeds1930(0x8b,0x80);//am3 if(Readds1930(0x0c)!=0x80) Writeds1930(0x8c,0x80);//am4 if(Readds1930(0x0d)!=0x05) Writeds1930(0x8d,0x05);//0 if(Readds1930(0x0e)!=0x00) Writeds1930(0x8e,0x00);//清零中断 } void readtime() { datanow[0]=Readds1930(3); //小时 datanow[1]=Readds1930(2); //分钟 datanow[2]=Readds1930(1); //秒 datanow[3]=Readds1930(0); //ms //datanow[0]=0x9; } void Settime(u8 hour,u8 min,u8 sec,u8 ms) { Writeds1930(0x80,0x00);//ms Writeds1930(0x81,sec);//s Writeds1930(0x82,min);//min Writeds1930(0x83,hour);//hour }
总结来说美信的时钟片子是很好用的,应用环境很多,而且种类也很多,如果用在工程项目上,简易一定要采用美信的片子,并且最好是原厂的片子,这样那个最稳定好用
相关文章推荐
- Java Web开发之:ModelDriven
- Cordys JAVA Object理解
- [译]用R语言做挖掘数据《七》
- 整数实现翻转---java实现
- js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
- rsync+inotify实现数据的实时同步
- Tkinter 控件详细介绍
- HDU 4870 Rating (2014 多校联合第一场 J)(概率)
- 开源完整版:《开源框架实战宝典电子书V1.0.0》内测版下载地址!
- js输入一个日期判断该日期是该年的第几天
- 对android volley框架的理解(一)
- 4Sum
- 小游戏(锅打灰太狼)
- 20150718,about c.
- JAVA事件处理机制3
- HDU-1865-1sting
- atitit.jndi的架构与原理以及资源配置and单元测试实践
- atitit.jndi的架构与原理以及资源配置and单元测试实践
- 俏江南张兰为何给自己点赞?
- 水题 Codeforces Round #105 (Div. 2) B. Escape