STM8S各个模块初始化_第1页
STM8S各个模块初始化_第2页
STM8S各个模块初始化_第3页
STM8S各个模块初始化_第4页
STM8S各个模块初始化_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STM8S各个模块初始化转原作者真不错 2012-12-09 22:20:38| 分类: 默认分类 | 标签:stm8s |举报|字号 订阅/*可选择的内部或者外部时钟*/#ifdef HSE_EXTvoid ClkInit(void) CLK_ICKR = 0X00; /禁止高速内部时钟,从停机(Halt) 或活跃停机(Active Halt) 模式快速唤醒禁止 CLK_ECKR |= 0X01; /使能外部时钟 while(!(CLK_ECKR & 0x02); /看外部晶振是否启动 CLK_ECKR |= 0X01; /使能外部时钟 CLK_CKDIVR = 0Xf9; /外部12M H

2、Z晶振作为CPU时钟 /入选24Mhz就在CLK_SWCR |= 0X02;出现问题 CLK_SWR = 0XB4; /主时钟选择为外部晶振 while(!(CLK_SWCR & 0x8); CLK_SWCR |= 0X02; /时钟切换 CLK_PCKENR1 = 0Xaf; /使能fMASTER时钟与对应外设的连接(仅I2C和TIM2,and TIM1)还有UART1,uart3 spi CLK_PCKENR2 = 0X00; /0X0C; CLK_CSSR = 0X00; /时钟安全系统寄存器关 while(CLK_CCOR & 0x04); /空闲才可以写CCOSEL CLK_CCOR

3、 |= 0X0d; /使能CCO始终输出,6M while(!(CLK_CCOR & 0x04); /看CCO输出的时钟是否正在工作 while(CLK_CCOR & 0x02); /等待可输出时钟可用 /CLK_HSITRIMR = 0X00-1; /HSI时钟修正寄存器,HSITRIM3:0:HSI修正值#elsevoid ClkInit(void) CLK_ICKR=0X01; /时能高速内部时钟,从停机(Halt) 或活跃停机(Active Halt) 模式快速唤醒使能 CLK_ECKR=0X00; /禁止外部时钟 CLK_SWR =0XE1; /选择16M内部时钟为主时钟 CLK_S

4、WCR=0X00; /禁止时钟切换 CLK_CKDIVR=0X08; /8MHZ 4:301:fHSI = fHSI RC输出/2 , 2:0000:fCPU = fMASTER CLK_PCKENR1 = 0Xaf; /使能fMASTER时钟与对应外设的连接(仅I2C和TIM2,and TIM1)还有UART1,uart3 spi CLK_PCKENR2 = 0X00; /0X0C; CLK_CSSR=0X00; /时钟安全系统寄存器关 CLK_HSITRIMR=0X00-1; /HSI时钟修正寄存器,HSITRIM3:0:HSI修正值#endif/*外部中断*/void Interrupt

5、Init(void) PD_DDR &=(0X40); /PD6设置为按键输? PD_CR1 |=0X40; PD_CR2 &=(0X40); /禁止外部中断/ PD_CR2 |=0X40; /使能外部中断 EXTI_CR1 |=0X80; /PD6下降沿出触发中断/ EXTI_CR1 |=0X40; /PD6上升沿出触发中断/*串口收发*/void Uart3Init(void) UART3_CR1 = 0x00; UART3_CR2 = 0x00; UART3_CR3 = 0x00; /1个停止位 UART3_BRR2 = 0x04; /24M的Fmaster下9600的波特率 UART3

6、_BRR1 = 0x9c; /24000000/9600 = 0x09c4 UART3_CR2 = 0x2c; /发送接收都使能,使能接收中断 void Uart3SendChar(U8 *Send_Buff,U8 Cnt) U8 i; for(i=0;iCnt;i+) while(!(UART3_SR & 0x80); UART3_DR=Send_Buffi; /*定时器*/void Timer1Init(void) TIM1_CR1 |=0X04; /自动重载,只有溢出才产生更新中断 TIM1_IER |=0X01; /允许更新中断/ TIM2_SR1=0X00; /状态寄存器 TIM1_

7、PSCR =0X01; /PSC3:0:预分频器的值 ,开预分频功能不许使能EGR中的UG位/ TIM1_PSCR =0X00; /PSC3:0:4预分频器的值 TIM2_EGR |=0X01; /时间产生状态寄存器,重新初始化计数器,并产生一个更新事件。 /如果不开预分频功能,此位可以删去/TIM2_CCMR1=0X00; /捕获/比较模式寄存器,可用于选择PWM输出端口 /TIM2_CCMR1=0X68; /PWM模式,通道1,预装载使能/ TIM2_CCMR2=0X68; /PWM模式,通道2,预装载使能/ TIM2_CCER2=0X03; /使能PWM输出通道/ TIM2_CCER1=

8、0X03; /使能PWM输出通道 TIM1_CNTRH=0X9C; /计数值 TIM1_CNTRL=0X40; TIM1_ARRH=0X9C; /自动重载值(10ms进一次中断),8M2分频,40000/4000000=10ms TIM1_ARRL=0X40; TIM1_CR1 |=0X01; /开计数器/*AWU唤醒*/void AWU_Open(void) AWU_APR = 0X3E; /APPRdiV=64 AWU_TBR = 0X0D; /time interval = 211 *APPRdiV/Fls=2048*64/128KHZ=1S 0D=2S/ AWU_TBR = 0X0E;

9、 /time interval = 211 *APPRdiV/Fls=2048*64/128KHZ=1S 0E=大约5S AWU_CSR = 0x30; /enable AWU,AWU_INT CLK_ICKR |= 0X20; /1:活跃停机(Active Halt) 模式下主dian ya tiao jie qi guan bivoid AWU_Close(void) AWU_APR = 0X3F; /APPRdiV AWU_TBR = 0X00; /disable time interval AWU_CSR = 0x00; /disable AWU CLK_ICKR &= (0X20);

10、void EEPROM_Init(void) FLASH_CR1 = 0x00; FLASH_CR2 = 0x00; FLASH_DUKR = MASS_KEY1; FLASH_DUKR = MASS_KEY2; /密钥使能 while(!(FLASH_IAPSR&0x08); /*等待写保护解锁*/*EEPROM*/u8 EEPROM_Write(u8 addr,u8 dat) u16 TimeOut; *(u8*)(addr + EEP_BASE) = dat; for( TimeOut = 0; TimeOut 0xFFFF; TimeOut+ ) if( FLASH_IAPSR & (

11、 WR_PG_DIS | EOP_BIT )return 1; /编程完成或者写到了写保护区 return 0; /超时退出 / while(!(FLASH_IAPSR&0x02); /*等待写完成*/u8 EEPROM_Read(u8 addr) return *(u8*)(EEP_BASE + addr);void EEPROM_THREE_BYTE_WRITE(void) EEPROM_Write(0x00,i2c_buff0); EEPROM_Write(0x01,i2c_buff1); EEPROM_Write(0x02,i2c_buff2);void EEPROM_THREE_BY

12、TE_READ(void) if(ADC_OnOff=1) ADC_ON_OR_OFF=2; else ADC_ON_OR_OFF=EEPROM_Read(0x00); ADC_OPEN_MIN=EEPROM_Read(0x01); ADC_OPEN_TIME=EEPROM_Read(0x02);/*ADC*/void adc_init(void) ADC_CR1 |=0X00; /关闭ADC,2分频 ADC_CR2 |=0X08; /数据右对齐,low 8BIT AT ADC_DRL;非扫描模式 ADC_CSR =0X04; /选择通道4, 禁止中断 /*取走ADC转换yi个通道的数据*/u

13、16 adc_converter(void) u8 m; for(m=0;m 7); / 十位I2C_CR1 = 0x01; /开I2CI2C_CR2 |= 0x04; /只产生应答信号,不产生起始和停止位I2C_ITR = 0x07; /使能中断void spi_init(void) SPI_CR2 = 0X01; SPI_CR1 = 0X44; /8MHZ 主模式 PB_DDR |= 1 5; /SCK PB_CR1 |= 1 5; /output PB_DDR |= 1 6; /MOSI PB_CR1 |= 1 6; /output PB_DDR &= (1 7); /MISO PB_C

14、R1 |= 1 =KeyInContinue1S) / KeyRestFlag=0; u16Timer1Cnt=0; keyinbuf=KeyRst; else / KeyRestFlag=0; keyinbuf=0; u16Timer1Cnt=0; if(keyinbuf=keychkbuf) if(f_key_state) keycvtbuf=keychkbuf; f_key_state=0; else keychkbuf=keyinbuf; f_key_state=1; if(keycvtbuf!=keyoldbuf) keyvalue=keycvtbuf&(keyoldbuf); keyoldbuf=keycvtbuf; /* if(keycvtbuf!=keyoldbuf) /按键按下 / k

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论