stm8s的c语言编程例程.docx
- 文档编号:740842
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:31
- 大小:28.93KB
stm8s的c语言编程例程.docx
《stm8s的c语言编程例程.docx》由会员分享,可在线阅读,更多相关《stm8s的c语言编程例程.docx(31页珍藏版)》请在冰豆网上搜索。
stm8s的c语言编程例程
实例一:
控制灯的亮灭(或者蜂鸣器响,只要连接相应端口就可以了):
#include"stm8s.h"〃头文件
#defineulongunsignedlong
///////////////////////////////////////////////////////////////////////////////
voiddelay(ulongi)
{ulongj;
for(j=0;j
{;}
}////////////延时函数
voidmain(void)////////////主函数
{
GPIO_Delnit(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);
}
}
第二步:
控制灯按照一定的频率闪烁:
频率可以使用时钟!
16MHz
Stm8启动时,主时钟默认为HSIRC时钟的8分频,HSIRC是可以提供一个低成本的
时钟源,
#include"stm8s.h"//头文件
voidCLK_Configuration(void);
voidmain(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);
}
}
voidCLK_Configuration(void)
{
/*Fmaster=16MHz*/
CLK_HSIPrescalerConfig(CLK_PRESCALER_HISDIV1);
}
例题三:
灯闪亮的同时蜂鸣器响
#include"stm8s.h"〃头文件
#defineulongunsignedlong
///////////////////////////////////////////////////////////////////////////////
voiddelay(ulongi)
{ulongj;
for(j=0;j
{;}
}////////////延时函数);
voidmain(void)////////////主函数
{
GPIO_Delnit(GPIOD);
GPIO_Delnit(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高速外部时钟信号(HSEuser-ext)
3.16MHz高速部RC振荡器(HSI)
4.128KHZ低速部RC(LSI)
各个时钟源可独立打开或者关闭,从而优化功耗。
HSE高速外部时钟信号,由两个时钟源产生:
HSE外部晶体/瓷谐振器;HSE用户外部有源
时钟。
(为了最大限度的减少输出失真和减少启动失真的稳定时间,谐振器和负载电容应尽可能的靠近谐振器引脚。
负载电容值应根据所选的谐振器进行调整。
)
外部1至24MHZ勺振荡器其优点在于能够产生精确的占空比为50%的主时钟信号。
为使系统快速启动,复位后时钟控制器自动使用HSI的8分频(HSI/8)做为主时钟。
其原因为
HSI的稳定时间短,而8分频可保证系统在较差的Vd[条件下安全启动。
时钟设置的目的到底是什么?
时钟设置肯定会出现中断?
貌似是这样的:
运用合适的时钟配置可以使得功耗降低,有时候计数频率很大,需要很大的
计数或者怎么样时,需要使用其他的时钟,即非默认的时钟!
暂且这样解释!
例题四:
利用中断
按键控制灯的亮灭。
#include"stm8s.h"〃头文件
voidmain(void)////////////主函数
{
GPIO_Delnit(GPIOD);
GPIO_Delnit(GPIOB);
GPIO_lnit(GPIOD,GPIO_PIN_1,GPIO_MODE_OUT_PP_LOW_FAST);
GPIO」nit(GPIOB,GPIO_PIN_O,GPIO_MODE_IN_FL_IT);
EXTI_DeInit();
EXTI_SetExtlntSensitivity(EXTI_PORT_GPIOB,
EXTI_SENSITIVITY_FALL_ONLY);///////定义端口的外部中断
enableInterruptsO;//////////////////这个一定不能丢,中断使能
while
(1)
{
}
}
#pragmavector=6//中断编号+2
__interruptvoidEXIT_PORTB」RQHander(void)
{
if((GPIO_ReadlnputData(GPIOB)&GPIO_PIN_O)==OxOO)///〃检查是否按下
{
GPIO_WriteReverse(GPIOD,GPIO_PIN_1);
}
}
mill默认的时钟为HSI的8分频,即上电默认的频率。
中断设置为上升沿触发:
则程序会有微小的变化:
#include"stm8s.h"〃头文件
voidmain(void)////////////主函数
{
GPIO_Delnit(GPIOD);
GPIO_Delnit(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_SetExtlntSensitivity(EXTI_PORT_GPIOB,EXTI_SENSITIVITY_RISE_ONLY);///////
定义端口的外部中断
enableInterrupts();//////////////////这个一定不能丢,中断使能
while
(1)
{
}
}
#pragmavector=6//中断编号+2
__interruptvoidEXIT_PORTB_IRQHander(void)
{
if((GPIO_ReadlnputData(GPIOB)&GPIO_PIN_O)==OxO1)/////检查是否按下
{
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_CN时钟。
预分频器功能如下:
1.预分频器是基于由一个3位寄存器(在TIMX_PSC寄存器中)来控制的一个7位的计数器。
由于该控制寄存器是带缓冲的所以它可以在系统运行中被改变。
可以分频计速器的时钟频率为1到128之间的2的任意次幕。
预分频器的值是通过一个预装载寄存器来载入的。
一旦LS字节被写入时,保存当前要被使用值影子寄存器的值就被立即载入。
对TIMX_PSC寄存器的读操作是访问预装载寄存器,因此在读的过程中没有什么特别要注意的地方。
中断使能寄存器:
TIMx_IER
位7:
保留,须保持清零
位6:
TIE:
触发中断使能:
0:
触发中断禁止;1:
触发中断使能;
位5:
1保留,须保持清零
位0:
UIE:
更新中断使能:
0:
更新中断禁止;1:
更新中断使能
状态寄存器1(TIMX_SR1
位7:
保留,须保持清零
位6:
TIF:
触发中断标志位(此位在触发事件发生时(检测到TRG信号的有效沿,在选择门控模式时硬件置位。
可以由软件清零。
)0:
无触发事件产生;1:
触发事件发生,此位当寄存器更新时由硬件置位(在timer4中该位保留)
位5:
1保留,须保持清零
位0:
UIF:
更新中断标志(此位在更新事件发生时由硬件置位。
可以由软件清零)
0:
无更新事件产生;1:
跟新事件发生。
此位当寄存器更新时由硬件置位。
1.如果TIM4_CR中的UDIS=Q则发生在计数器溢出时。
2.如果TIM4_CR中的UDIS=(和URS=0则发生在通过设置TIM4_EG的UC位产生软
件重新初始化计数时。
时间产生寄存器(TIM4_EGR
位7:
保留,须保持清零
位0:
TG触发事件产生:
可用软件对该位置位以产生一个触发事件。
该位由硬件自动清零。
0:
无触发发生;1:
TIM4_SR中TIF标志
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm8s 语言 编程 例程