77范文网 - 专业文章范例文档资料分享平台

stm8s的c语言编程例程应用

来源:网络收集 时间:2019-06-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

实例一:控制灯的亮灭(或者蜂鸣器响,只要连接相应端口就可以了): #include \头文件 #define ulong unsigned long

/////////////////////////////////////////////////////////////////////////////// void delay(ulong i) {ulong j;

for(j=0;j

}////////////延时函数

void main(void)////////////主函数 {

GPIO_DeInit(GPIOD);

GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); while(1) {

GPIO_WriteHigh(GPIOD, GPIO_PIN_1); delay(10000); delay(10000); delay(10000);

GPIO_WriteLow(GPIOD, GPIO_PIN_1); delay(10000); delay(10000); delay(10000); } }

第二步:控制灯按照一定的频率闪烁:频率可以使用时钟! Stm8启动时,主时钟默认为HSIRC时钟的8分频,HSIRC是可以提供一个低成本的16MHz时钟源,

#include \头文件 void CLK_Configuration(void); void main(void)////////////主函数 {

GPIO_DeInit(GPIOD);

GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); CLK_Configuration(); while(1) {

GPIO_WriteReverse(GPIOD, GPIO_PIN_1); } }

void CLK_Configuration(void) {

/* Fmaster = 16MHz */

CLK_HSIPrescalerConfig( CLK_PRESCALER_HISDIV1); }

例题三:灯闪亮的同时蜂鸣器响 #include \头文件 #define ulong unsigned long

/////////////////////////////////////////////////////////////////////////////// void delay(ulong i) {ulong j;

for(j=0;j

}////////////延时函数);

void main(void)////////////主函数 {

GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOB);

GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_FAST ); while(1) {

GPIO_WriteHigh(GPIOD, GPIO_PIN_1); delay(10000); delay(10000);

GPIO_WriteLow(GPIOD, GPIO_PIN_1); delay(10000); delay(10000);

GPIO_WriteHigh(GPIOB, GPIO_PIN_0); delay(10000); delay(10000);

GPIO_WriteLow(GPIOB, GPIO_PIN_0); delay(10000); delay(10000); } }

时钟控制器功能强大而且灵活易用。其目的在于使用用户在获得最好性能的同时,亦能保证消耗的功率最低。

用户可以独立管理各个时钟源,并将它们分配到CPU或者各个外设。主时钟和CPU的时钟均带有分频器。 主时钟源:

四种时钟源可以作为主时钟源:

1.1—24MHz高速外部晶体振荡器(HSE)

2.最大24MHz高速外部时钟信号(HSE user-ext) 3.16MHz高速内部RC振荡器(HSI) 4.128KHz低速内部RC(LSI)

各个时钟源可独立打开或者关闭,从而优化功耗。

HSE:高速外部时钟信号,由两个时钟源产生:HSE外部晶体/陶瓷谐振器;HSE用户外部有源时钟。(为了最大限度的减少输出失真和减少启动失真的稳定时间,谐振器和负载电容应尽可能的靠近谐振器引脚。负载电容值应根据所选的谐振器进行调整。)

外部1至24MHz的振荡器其优点在于能够产生精确的占空比为50%的主时钟信号。 为使系统快速启动,复位后时钟控制器自动使用HSI的8分频(HSI/8)做为主时钟。其原因为HSI的稳定时间短,而8分频可保证系统在较差的VDD条件下安全启动。 时钟设置的目的到底是什么?时钟设置肯定会出现中断?

貌似是这样的:运用合适的时钟配置可以使得功耗降低,有时候计数频率很大,需要很大的计数或者怎么样时,需要使用其他的时钟,即非默认的时钟!暂且这样解释!

例题四:利用中断

按键控制灯的亮灭。

#include \头文件 void main(void)////////////主函数 {

GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOB);

GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_IT); EXTI_DeInit();

EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB ,

EXTI_SENSITIVITY_FALL_ONLY );///////定义端口的外部中断

enableInterrupts();//////////////////这个一定不能丢,中断使能 while(1) { } }

#pragma vector=6//中断编号+2

__interrupt void EXIT_PORTB_IRQHander(void) {

if((GPIO_ReadInputData(GPIOB)&GPIO_PIN_0)==0x00)/////检查是否按下 {

GPIO_WriteReverse(GPIOD,GPIO_PIN_1); }

}

//////默认的时钟为HSI的8分频,即上电默认的频率。

中断设置为上升沿触发:则程序会有微小的变化: #include \头文件 void main(void)////////////主函数 {

GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOB);

GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_IT); EXTI_DeInit();

EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB ,EXTI_SENSITIVITY_RISE_ONLY );///////定义端口的外部中断

enableInterrupts();//////////////////这个一定不能丢,中断使能 while(1) { } }

#pragma vector=6//中断编号+2

__interrupt void EXIT_PORTB_IRQHander(void) {

if((GPIO_ReadInputData(GPIOB)&GPIO_PIN_0)==0x01)/////检查是否按下 {

GPIO_WriteReverse(GPIOD,GPIO_PIN_1); } }

时钟这里到底是怎么回事啊?LSI等如何配置,配置时钟做什么用的?

例题五:设计一个程序使得当按键按下后发光二极管按照不同的频率闪烁。 分析:不同的频率闪烁,可以设置为按照100,500,1000,2000Hz的频率闪烁。

定时器timer4的使用:

该定时器由一个带可编程预分频器的8位可位自动重载的向上计数器所组成,它可以用来做时基发生器,具有溢出中断功能。

Timer6同时钟/触发信号控制器一起用于定时器同步和级联。

Time4的主要功能包括:

1.8位向上计数的自动重载计数器(既然是向上计数,那么计算初值时?) 2.3位可编程的与分配器(可在运行中修改),提供1,2,4,8,16,32,64,和128这8种分频比例。 3.中断产生

——在计数器更新时:计数器溢出。 Timer6的主要功能:

1.8位向上计数的自动重载计数器 2.3位可编程的与分配器(可在运行中修改),提供1,2,4,8,16,32,64,和128这8种分频比例。 3.用于和外部信号相连和定时器级联的同步电路 4.中断产生:

——在计数器更新时:计数器溢出 ——在触发信号输入时。 Timer4和timer6中断:

该定时器的时钟源是内部时钟(Fmaster)。该时钟源是直接连接到CK_PSC时钟的,CK_PSC时钟通过预分频器分频后给定时器提供CK_CNT时钟。 预分频器功能如下:

1. 预分频器是基于由一个3位寄存器(在TIMX_PSCR寄存器中)来控制的一个7位的计数器。由于该控制寄存器是带缓冲的所以它可以在系统运行中被改变。可以分频计速器的时钟频率为1到128之间的2的任意次幂。预分频器的值是通过一个预装载寄存器来载入的。一旦LS字节被写入时,保存当前要被使用值影子寄存器的值就被立即载入。对TIMX_PSCR寄存器的读操作是访问预装载寄存器,因此在读的过程中没有什么特别要注意的地方。 中断使能寄存器:TIMx_IER 位7:保留,须保持清零

位6:TIE:触发中断使能:0:触发中断禁止;1:触发中断使能; 位5:1 保留,须保持清零

位0:UIE:更新中断使能:0:更新中断禁止;1:更新中断使能 状态寄存器1(TIMX_SR1) 位7:保留,须保持清零

位6:TIF:触发中断标志位(此位在触发事件发生时(检测到TRGI信号的有效沿,在选择门控模

式时硬件置位。可以由软件清零。

)0:无触发事件产生;1:触发事件发生,此位当寄存器更新时由硬件置位(在timer4中该位保留) 位5:1 保留,须保持清零 位0:UIF:更新中断标志(此位在更新事件发生时由硬件置位。可以由软件清零) 0:无更新事件产生;1:跟新事件发生。 此位当寄存器更新时由硬件置位。

1. 如果TIM4_CR1中的UDIS=0,则发生在计数器溢出时。 2. 如果TIM4_CR1中的UDIS=0和URS=0,则发生在通过设置TIM4_EGR的UG位产生软件重新初始化计数时。 时间产生寄存器(TIM4_EGR) 位7:保留,须保持清零

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库stm8s的c语言编程例程应用在线全文阅读。

stm8s的c语言编程例程应用.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/657614.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: