ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:20.67KB ,
资源ID:10534429      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10534429.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(stm8寄存器.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

stm8寄存器.docx

1、stm8寄存器所用芯片 stm8s105s4开发环境:ST Visual DevelopStm8s的库为V1.1.1CPU频率及所有外设频率/时钟系统复位后,所有外设时钟均处于开的状态。用户可通过清除CLK_PCKENR1或CLK_PCKENR2中的PCKEN位来关闭相应的外设时钟。但是在关闭外设的时钟前,用户必须设置相应的位禁用该外设。为了使能一个外设,用户必须先设置寄存器CLK_PCKENR中对应的PCKEN位,然后设置外设控制寄存器中的外设使能位。 AWU计数器是由独立于fMASTER的内部或外部时钟(LSI或HSE)驱动,因此,即使寄存器的时钟已被关掉,该外设依然可以继续运行。例如禁用

2、所有外设时钟:CLK_PCKENR1 = 0x00;/ close all clks of Peripheral CLK_PCKENR2 = 0x00;开启定时器TIME1定时器时钟:CLK_PCKENR1 |= 0x20; /具体参考STM8S_Reference 59页CPU分频因子:CPU时钟(fCPU)由主时钟(fMASTER)分频而来,分频因子由时钟分频寄存器(CLK_CKDIVR)中的位CPUDIV2:0决定。共7个分频因子可供选择(1至128中,2的幂)。如图13所示。 fCPU为CPU和窗口看门狗提供时钟。时钟分频寄存器(CLK_CKDIVR)通用端口GPIO和其他的单片机一样

3、,我是习惯从端口开始学习。Stm8s105s系列最多有7组I/O端口,AG,而根据不同的封装可能没有其中的一些,在这里根据具体项目,我选择的是44脚封装的。使用任何的外设前,我们都要根据需要的将参考手册和数据手册看一边,当然端口也不能另外了。作为通用的IO口,每一个GPIO端口都有5个对应的寄存器如下表:注意:初始复位时,所有引脚设置为浮空输入。地址偏移值寄存器7 65432100x00Px_ODR复位值ODR70ODR60ODR50ODR40ODR30ODR20ODR10ODR000x01Px_IDR复位值IDR70IDR60IDR50IDR40IDR30IDR20IDR10IDR000x0

4、2Px_DDR复位值DDR70DDR60DDR50DDR40DDR30DDR20DDR10DDR000x03Px_CR1复位值C170C160C150C140C130C120C110C1000x04Px_CR2复位值C270C260C250C240C230C220C210C200其中Px_ODR是ODR7:0:端口输出数据寄存器位; (1)在输出模式下,写入寄存器的数值通过锁存器加到相应的引脚上。读ODR寄存器,返回之前锁存的寄存器值。 (2)在输入模式下,写入ODR的值将被锁存到寄存器中,但不会改变引脚状态。ODR寄存器在复位后总是为0。位操作指令(BSET, BRST) 可以用来设置DR寄

5、存器来驱动相应的引脚,但不会影响到其他引脚。Px_IDR: IDR7:0:端口输入数据寄存器位 不论引脚是输入还是输出模式,都可以通过该寄存器读入引脚状态值。该寄存器为只读寄存器。 0:逻辑低电平 1:逻辑高电平Px_DDR: DDR7:0:数据方向寄存器位 ,这些位可通过软件置1或置0,选择引脚输入或输出 0: 输入模式 1: 输出模式Px_CR1: C17:0控制寄存器位 这些位可通过软件置1或置0,用来在输入或输出模式下选择不同的功能。在 输入模式时(DDR=0): 0:浮空输入 1::带上拉电阻输入 在 输出模式时(DDR=1): 0:模拟开漏输出(不是真正的开漏输出) 1: 推挽输出

6、, 由CR2相应的位做输出摆率控制Px_CR2: C27:0控制寄存器位 相应的位通过软件置1或置0,用来在输入或输出模式下选择不同的功能。在输入模式下,由CR2相应的位使能中断。如果该引脚无中断功能,则对该引脚无影响。 在输出模式下,置位将提高IO速度。此功能适用O3和O4输出类型。(参见引脚描述表) 在 输入模式时(DDR=0): 0: 禁止外部中断 1: 使能外部中断 在 输出模式时(DDR=1): 0:输出速度最大为2MHZ. 1:输出速度最大为10MHZ在stm8的库里面已经将这些外设都进行了封装定义,并提供这些外设的SPI,也就是我们所说的stm8的库函数。下面我们看看任何结构化的

7、定义这些IO的寄存器的。typedef struct GPIO_structvu8 ODR; /*! Output Data Register */vu8 IDR; /*! Input Data Register */vu8 DDR; /*! Data Direction Register */vu8 CR1; /*! Configuration Register 1 */vu8 CR2; /*!DDR=VALUE;这样进行每个端口设置时,肯定要设置使用哪个引脚,速度是多少,哪种模式,这几个对每组端口都是一样的,st有对他进行了封装,如下:typedef enumGPIO_MODE_IN_FL

8、_NO_IT = (u8)0b00000000, /*! Input floating, no external interrupt */GPIO_MODE_IN_PU_NO_IT = (u8)0b01000000, /*! Input pull-up, no external interrupt */GPIO_MODE_IN_FL_IT = (u8)0b00100000, /*! Input floating, external interrupt */GPIO_MODE_IN_PU_IT = (u8)0b01100000, /*! Input pull-up, external inter

9、rupt */GPIO_MODE_OUT_OD_LOW_FAST = (u8)0b10100000, /*! Output open-drain, low level, 10MHz */GPIO_MODE_OUT_PP_LOW_FAST = (u8)0b11100000, /*! Output push-pull, low level, 10MHz */GPIO_MODE_OUT_OD_LOW_SLOW = (u8)0b10000000, /*! Output open-drain, low level, 2MHz */GPIO_MODE_OUT_PP_LOW_SLOW = (u8)0b110

10、00000, /*! Output push-pull, low level, 2MHz */GPIO_MODE_OUT_OD_HIZ_FAST = (u8)0b10110000, /*! Output open-drain, high-impedance level,10MHz */GPIO_MODE_OUT_PP_HIGH_FAST = (u8)0b11110000, /*! Output push-pull, high level, 10MHz */GPIO_MODE_OUT_OD_HIZ_SLOW = (u8)0b10010000, /*! Output open-drain, hig

11、h-impedance level, 2MHz */GPIO_MODE_OUT_PP_HIGH_SLOW = (u8)0b11010000 /*!ODR |= (1ODR = (14); /灯闪烁 For(i=0;iDR = Data;while(UART2-SR &0x40)=0) ; /我修改的UART2-SR &= (1DR);也可以直接读取寄存器中的数据,注意:在中断中读完数据后,退出中断前都需要先清中断标志位,调用函数如下:UART2_ClearITPendingBit(UART2_IT_LBDF);否则中断一直存在。ADC转换配置:ADC1和ADC2是10位的逐次比较型模拟数字转换

12、器。提供多达16路多功能的输入通道(实际准确的通道数量在数据手册的引脚描述说明)。A/D转换的各通道可以执行单次和连续的转换模式。相对与ADC2、ADC1具有一些扩展功能,包括扫描模式,带缓存的连续模式以及模拟看门狗。请参考数据手册来了解不同型号的ADC1和ADC2的功能信息。ADC开关控制通过置位ADC_CR1寄存器的ADON位来开启ADC。当首次置位ADON位时,ADC从低功耗模式唤醒。为了启转换必须第二次使用写指令来置位ADC_CR1寄存器的ADON位。在转换结束时ADC会保持在上电状态,用户只需要置位ADON位来启动下次转换。如果长时间没有使用ADC,推荐ADC切换到低功耗模式来降低功

13、耗,这可以通过清零ADON位来实现。当ADC模块上电后,所选通道对应的I/O输出模块是被禁用的,因此推荐在ADC上电前要选适合的ADC转换通道。ADC时钟ADC的时钟是由Fmaster时钟经过预分频后提供的。时钟的预分频因子是由ADC_CR1寄存器的SPSEL2:0决定的。数据对齐ADC_CR2寄存器中的ALIGN位于选择转换后数据的对齐方式:右对齐:8个低位数据被写入ADC_DL中,其余在ADC_DH中,读取时必须先读低位再读高位。左对齐:8个高位数据被写入ADC_DH中,其余在ADC_DL中,读取时必须先读高位再读低位。我利用ST公司提供的固件库实验如下:初始化如下(单次转换):void

14、Sys_ADC1_3_Int(void)/* Init GPIO for ADC1 */GPIO_Init(GPIOB, (GPIO_PIN_0 |GPIO_PIN_1 |GPIO_PIN_2), GPIO_MODE_IN_FL_NO_IT); /初始化ADC 端口 CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC , ENABLE);ADC1_DeInit();/ Init ADC2 peripheral ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D2

15、, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE); /ADC1_ITConfig( ADC1_IT_EOCIE,ENABLE); /Enable EOC interrupt 只有在使用ADC中断的时候才打开这一项/*Start Conversion */ADC1_StartConversion();/启动ADC转换 这里ADC读取分使用中断方式和不使用两种不使用中断,启动ADC后等待转换完毕:ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_C

16、HANNEL, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_CHANNEL, DISABLE); /配置ADC通道及ADC转换模式 /*数据右对齐*/ADC1_StartConversion();/启动ADC转换 /*Start Conversion */ while(ADC1-CSR & 0x80 ) != 0x80 ) ; /等待ADC转换完毕Adc_Value = ADC1_GetConversionValue(); /读取ADC转换数据,先低位,后高位中断方式: 在ADC中断函数中,直接

17、读取ADC转换数据,Adc_Value = ADC1_GetConversionValue(); /读取ADC转换数据,先低位,后高位在主程序中隔一段时间选择ADC通道和启动ADC就可以了。ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE); /ADC1_ITConfig( ADC1_IT_EOCIE,ENABLE); /Enable EOC interrupt 只有在使用ADC中断的时候才打开这一项

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2