1、 CLK_CSSR = 0X00; /时钟安全系统寄存器关 while(CLK_CCOR & 0x04); /空闲才可以写CCOSEL CLK_CCOR |= 0X0d; /使能CCO始终输出,6M(CLK_CCOR & /看CCO输出的时钟是否正在工作 /等待可输出时钟可用 /CLK_HSITRIMR = 0X00-1; /HSI时钟修正寄存器,HSITRIM3:0:HSI修正值#else CLK_ICKR=0X01; /时能高速内部时钟,从停机(Halt) 或活跃停机(Active Halt) 模式快速唤醒使能 CLK_ECKR=0X00; /禁止外部时钟 CLK_SWR =0XE1; /
2、选择16M内部时钟为主时钟 CLK_SWCR=0X00; /禁止时钟切换 CLK_CKDIVR=0X08; /8MHZ 4:301:fHSI = fHSI RC输出/2 , 2:0000:fCPU = fMASTER CLK_CSSR=0X00; CLK_HSITRIMR=0X00-1;#endif/*外部中断*/void InterruptInit(void) PD_DDR &=(0X40); /PD6设置为按键输? PD_CR1 |=0X40; PD_CR2 & /禁止外部中断/ PD_CR2 |=0X40; /使能外部中断 EXTI_CR1 |=0X80; /PD6下降沿出触发中断/ E
3、XTI_CR1 |=0X40; /PD6上升沿出触发中断/*串口收发*/void Uart3Init(void) UART3_CR1 = 0x00; UART3_CR2 = 0x00; UART3_CR3 = 0x00; /1个停止位 UART3_BRR2 = 0x04; /24M的Fmaster下9600的波特率 UART3_BRR1 = 0x9c; /24000000/9600 = 0x09c4 UART3_CR2 = 0x2c; /发送接收都使能,使能接收中断 void Uart3SendChar(U8 *Send_Buff,U8 Cnt) U8 i; for(i=0;iCnt;i+)
4、(UART3_SR & 0x80); UART3_DR=Send_Buffi; /*定时器*/void Timer1Init(void) TIM1_CR1 |=0X04; /自动重载,只有溢出才产生更新中断 TIM1_IER |=0X01; /允许更新中断/ TIM2_SR1=0X00; /状态寄存器 TIM1_PSCR =0X01; /PSC3:预分频器的值 ,开预分频功能不许使能EGR中的UG位/ TIM1_PSCR =0X00;4预分频器的值 TIM2_EGR |=0X01; /时间产生状态寄存器,重新初始化计数器,并产生一个更新事件。 /如果不开预分频功能,此位可以删去/TIM2_CC
5、MR1=0X00; /捕获/比较模式寄存器,可用于选择PWM输出端口 /TIM2_CCMR1=0X68; /PWM模式,通道1,预装载使能/ TIM2_CCMR2=0X68; /PWM模式,通道2,预装载使能/ TIM2_CCER2=0X03; /使能PWM输出通道/ TIM2_CCER1=0X03; TIM1_CNTRH=0X9C; /计数值 TIM1_CNTRL=0X40; TIM1_ARRH=0X9C; /自动重载值(10ms进一次中断),8M2分频,40000/4000000=10ms TIM1_ARRL=0X40; TIM1_CR1 |=0X01; /开计数器/*AWU唤醒*/voi
6、d 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; /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
7、bivoid AWU_Close(void) AWU_APR = 0X3F; /APPRdiV AWU_TBR = 0X00; /disable time interval AWU_CSR = 0x00; /disable AWU CLK_ICKR &= (0X20);void EEPROM_Init(void) FLASH_CR1 = 0x00; FLASH_CR2 = 0x00; FLASH_DUKR = MASS_KEY1; FLASH_DUKR = MASS_KEY2; /密钥使能(FLASH_IAPSR&0x08); /*等待写保护解锁*/*EEPROM*/u8 EEPROM_Wri
8、te(u8 addr,u8 dat) u16 TimeOut; *(u8*)(addr + EEP_BASE) = dat; for( TimeOut = 0; TimeOut 0xFFFF; TimeOut+ ) if( FLASH_IAPSR & ( WR_PG_DIS | EOP_BIT )return 1; /编程完成或者写到了写保护区 return 0; /超时退出 / while(!0x02); /*等待写完成*/u8 EEPROM_Read(u8 addr) return *(u8*)(EEP_BASE + addr);void EEPROM_THREE_BYTE_WRITE(v
9、oid) EEPROM_Write(0x00,i2c_buff0); EEPROM_Write(0x01,i2c_buff1); EEPROM_Write(0x02,i2c_buff2);void EEPROM_THREE_BYTE_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 |=
10、0X00; /关闭ADC,2分频 ADC_CR2 |=0X08; /数据右对齐,low 8BIT AT ADC_DRL;非扫描模式 ADC_CSR =0X04; /选择通道4, 禁止中断 /*取走ADC转换yi个通道的数据*/u16 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 主模式
11、PB_DDR |= 1 5; /SCK PB_CR1 |= 1 /output 6; /MOSI PB_DDR &= (1 =KeyInContinue1S)/ KeyRestFlag=0; u16Timer1Cnt=0; keyinbuf=KeyRst; keyinbuf=0; if(keyinbuf=keychkbuf) if(f_key_state) keycvtbuf=keychkbuf; f_key_state=0; keychkbuf=keyinbuf; f_key_state=1; if(keycvtbuf!=keyoldbuf) keyvalue=keycvtbuf&(keyoldbuf); keyoldbuf=keycvtbuf;/* =keyoldbuf) /按键按下/ keyvalue|=keycvtbuf& keymediavalue=keycvtbuf&/ keyoldbuf=keycvtbuf; key_up_flag=1;/ return keyvalue; if(key_up_flag=1) /按键抬起 if(keycvtbuf=keyoldbuf) key_up_flag=0; keyvalue=keymediavalue;/ return 0;*/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1