STM8S个模块初始化Word文档格式.docx

上传人:b****3 文档编号:18286851 上传时间:2022-12-15 格式:DOCX 页数:7 大小:17.62KB
下载 相关 举报
STM8S个模块初始化Word文档格式.docx_第1页
第1页 / 共7页
STM8S个模块初始化Word文档格式.docx_第2页
第2页 / 共7页
STM8S个模块初始化Word文档格式.docx_第3页
第3页 / 共7页
STM8S个模块初始化Word文档格式.docx_第4页
第4页 / 共7页
STM8S个模块初始化Word文档格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

STM8S个模块初始化Word文档格式.docx

《STM8S个模块初始化Word文档格式.docx》由会员分享,可在线阅读,更多相关《STM8S个模块初始化Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。

STM8S个模块初始化Word文档格式.docx

CLK_CSSR=0X00;

//时钟安全系统寄存器关

while((CLK_CCOR&

0x04));

//空闲才可以写CCOSEL

CLK_CCOR|=0X0d;

//使能CCO始终输出,6M

(CLK_CCOR&

//看CCO输出的时钟是否正在工作

//等待可输出时钟可用

//CLK_HSITRIMR=0X00-1;

//HSI时钟修正寄存器,HSITRIM[3:

0]:

HSI修正值

}

#else

CLK_ICKR=0X01;

//时能高速内部时钟,从停机(Halt)或活跃停机(ActiveHalt)模式快速唤醒使能

CLK_ECKR=0X00;

//禁止外部时钟

CLK_SWR=0XE1;

//选择16M内部时钟为主时钟

CLK_SWCR=0X00;

//禁止时钟切换

CLK_CKDIVR=0X08;

//8MHZ[4:

3]01:

fHSI=fHSIRC输出/2,[2:

0]000:

fCPU=fMASTER

CLK_CSSR=0X00;

CLK_HSITRIMR=0X00-1;

#endif

/********外部中断****************/

voidInterruptInit(void)

PD_DDR&

=~(0X40);

//PD6设置为按键输?

PD_CR1|=0X40;

PD_CR2&

//禁止外部中断

//PD_CR2|=0X40;

//使能外部中断

EXTI_CR1|=0X80;

//PD6下降沿出触发中断

//EXTI_CR1|=0X40;

//PD6上升沿出触发中断

/*****************串口收发******************/

voidUart3Init(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;

//发送接收都使能,使能接收中断

voidUart3SendChar(U8*Send_Buff,U8Cnt)

U8i;

for(i=0;

i<

Cnt;

i++)

{

(UART3_SR&

0x80));

UART3_DR=Send_Buff[i];

}

/***********定时器**************************/

voidTimer1Init(void)

TIM1_CR1|=0X04;

//自动重载,只有溢出才产生更新中断

TIM1_IER|=0X01;

//允许更新中断

//TIM2_SR1=0X00;

//状态寄存器

TIM1_PSCR=0X01;

//PSC[3:

预分频器的值,开预分频功能不许使能EGR中的UG位

//TIM1_PSCR=0X00;

4预分频器的值

TIM2_EGR|=0X01;

//时间产生状态寄存器,重新初始化计数器,并产生一个更新事件。

//如果不开预分频功能,此位可以删去

//TIM2_CCMR1=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唤醒********************/

voidAWU_Open(void)

AWU_APR=0X3E;

//APPRdiV=64

AWU_TBR=0X0D;

//timeinterval=2^11*APPRdiV/Fls=2048*64/128KHZ=1S0D=2S

//AWU_TBR=0X0E;

//timeinterval=2^11*APPRdiV/Fls=2048*64/128KHZ=1S0E==大约5S

AWU_CSR=0x30;

//enableAWU,AWU_INT

CLK_ICKR|=0X20;

//1:

活跃停机(ActiveHalt)模式下主dianyatiaojieqiguanbi

voidAWU_Close(void)

AWU_APR=0X3F;

//APPRdiV

AWU_TBR=0X00;

//disabletimeinterval

AWU_CSR=0x00;

//disableAWU

CLK_ICKR&

=~(0X20);

voidEEPROM_Init(void)

FLASH_CR1=0x00;

FLASH_CR2=0x00;

FLASH_DUKR=MASS_KEY1;

FLASH_DUKR=MASS_KEY2;

//密钥使能

(FLASH_IAPSR&

0x08));

/*等待写保护解锁*/

/***********EEPROM***************************/

u8EEPROM_Write(u8addr,u8dat)

u16TimeOut;

*((u8*)(addr+EEP_BASE))=dat;

for(TimeOut=0;

TimeOut<

0xFFFF;

TimeOut++)

{

if(FLASH_IAPSR&

(WR_PG_DIS|EOP_BIT))return1;

//编程完成或者写到了写保护区

}

return0;

//超时退出

//while(!

0x02));

/*等待写完成*/

u8EEPROM_Read(u8addr)

return*((u8*)(EEP_BASE+addr));

voidEEPROM_THREE_BYTE_WRITE(void)

EEPROM_Write(0x00,i2c_buff[0]);

EEPROM_Write(0x01,i2c_buff[1]);

EEPROM_Write(0x02,i2c_buff[2]);

voidEEPROM_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***********************/

voidadc_init(void)

ADC_CR1|=0X00;

//关闭ADC,2分频

ADC_CR2|=0X08;

//数据右对齐,low8BITATADC_DRL;

非扫描模式

ADC_CSR=0X04;

//选择通道4,禁止中断

/********取走ADC转换yi个通道的数据**********/

u16adc_converter(void)

{

u8m;

for(m=0;

m<

30;

m++);

//等待上电完成

ADC_CR1|=0X1;

//启动转换

(ADC_CSR&

0x80));

//等待转换结束14个时钟周期

ADC_CSR&

=0X7F;

//清除中断标志

returnADC_DR;

/****************I2C**************************/

voidI2C_init(void)

I2C_CCRH=0x00;

//标准I2C接口

//I2C_CCRL=80;

//I2C_FREQR=0x10;

//输入外设时钟频率为2MHz

I2C_CR1=0x00;

//禁止I2C外设

I2C_FREQR=8;

//8MHZ//经测试主芯片时钟至少》8Mhz才能正常收到数据

I2C_OARL=SLAVE_ADDRESS;

//

I2C_OARH=0x40;

//七位

//I2C_OARH=0xC0|((SLAVE_ADDRESS&

0x300)>

>

7);

//十位

I2C_CR1=0x01;

//开I2C

I2C_CR2|=0x04;

//只产生应答信号,不产生起始和停止位

I2C_ITR=0x07;

//使能中断

voidspi_init(void)

SPI_CR2=0X01;

SPI_CR1=0X44;

//8MHZ主模式

PB_DDR|=1<

<

5;

//SCK

PB_CR1|=1<

//output

6;

//MOSI

PB_DDR&

=~(1<

//MISO

7;

//inputwithpull-up

CLK_PCKENR1|=0x10;

SPI1_CR1=0x04;

SPI1_CR2=0x03;

SPI1_CRCPR=0x07;

SPI1_ICR=0x00;

SPI1_CR1|=0x40;

/*************SPI**************************/

UINT8SPI_RW(UINT8byte)

unsignedchardata;

//while(SPI1_SR&

0x80);

//Busyflag

SPI1_SR&

0x02);

SPI1_DR=byte;

0x01);

_asm("

nop"

);

data=SPI1_DR;

return(data);

/****************按键*************************/

externu16keyvalue;

u8f_keytime;

//externu8KeyRestFlag;

u16u16Timer1Cnt;

voidkeyscan(void)

staticu16f_key_state=0;

u8key_up_flag=0;

staticu16keyoldbuf=0;

staticu16keyinbuf=0,keychkbuf=0,keycvtbuf=0;

if(f_keytime==1)

f_keytime=0;

key_up_flag=PC_IDR&

0x10;

if(key_up_flag==0x00)//

if(u16Timer1Cnt>

=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;

//returnkeyvalue;

if(key_up_flag==1)//按键抬起

if(keycvtbuf==keyoldbuf)

key_up_flag=0;

keyvalue=keymediavalue;

//return0;

****/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1