STM8 单片机例程:有谁有一个LED一亮一灭的例程呢?是SMT8S的,最好带说明
作者&投稿:符性 (若有异议请与网页底部的电邮联系)
看ST的固件库啊,里面不全是例子,而且有注释!
占空比=0 和占空比=100,是一个高电平一个低电平,当然能实现LED的亮灭了,占空比从0-100可以发现LED的亮度是从0到100%亮度变化的。仔细理解下PWM占空比的概念。
stm8的timer2利用溢出中断,实现1s,LED闪烁一次#include <iostm8s207s8.h>
#include <intrinsics.h>
typedef unsigned char U8;
typedef unsigned int U16;
typedef unsigned long U32;
U16 cnt=0;
//----------------------------initial gpio
void GPIO_init(void)
{
PE_DDR=0X07;
PE_CR1=0X07;
PE_CR2=0X00;
}
//--------------------------clk initial
void CLK_init(void)
{
CLK_ECKR |=0X1; //开启外部时钟
while(!(CLK_ECKR&0X2)); //等待外部时钟rdy
CLK_CKDIVR &= 0XF9; //CPU 2分频
CLK_SWR = 0XB4; //选择外部时钟
while(!(CLK_SWCR&0X8)); //这里要等
CLK_SWCR |=0X2; //使能外部时钟
}
//-----------------------------TIMER2 init
void TIM2_init()
{
TIM2_PSCR |=0X04; //DIV16 1.333333US -> 外部晶振12mhz
TIM2_IER |= 0X01; //UIE允许中断
TIM2_ARRH = 0X1d;
TIM2_ARRL = 0X4c;
// TIM2_EGR |=0X01; //UG使能
TIM2_CR1 |= 0X85; //APPE,URS,CEN使能
}
//----------------------------------------FUNCTION
//-------------------initial device
void DEVICE_init(void)
{
CLK_init();
GPIO_init();
TIM2_init();
}
void delay_nms(unsigned int n)
{
unsigned int i;
for(;n>0;n--)
{
for(i=0;i<8000;i++);
}
}
//-----------------------------------interrupt
//#define TIM2_OVR_UIF_vector 0x0F 定时2溢出中断 10ms溢出中断
#pragma vector = TIM2_OVR_UIF_vector
__interrupt void TIM2_OVR_Hander(void)
{
TIM2_SR1 &=~0x01;//清标志
cnt++;
}
//-------------------main
void main(void)
{
__disable_interrupt();
DEVICE_init();
__enable_interrupt();
while(1)
{
if(cnt==100)
{
cnt=0;
PE_ODR^=0X01;
}
}
}
6以后如何
柞寒氢溴: stm8的timer2利用溢出中断,实现1s,LED闪烁一次 #include <iostm8s207s8.h> #include <intrinsics.h> typedef unsigned char U8; typedef unsigned int U16; typedef unsigned long U32; U16 cnt=0; //----------------------------initial gpio void ...
宕昌县13282403039: 用STM8S105单片机写一个输出频率为2KHz的方波,C语言? 没用过stm8单片机,求入门资料.谢谢!?
柞寒氢溴: //此例程是通过TIM2 CH1(PD4脚)通道来输出一个频率2K 占空比可调的方波,占空比可通过PD7脚的按键调 #include "STM8S105K.h" typedef unsigned char u8; typedef unsigned int u16; u16 value; void SystemInit(void) { CLK_CKDIVR = 0x08; ...
宕昌县13282403039: STM8单片机如何使用? - ?
柞寒氢溴: 我前段时间刚搞过STM8,现在在搞STM32,如果你有211351的基础STM8应该是很容易的,STM8跟AVR是很象的,同样要用IO口的是候要先5261初始化IO口,建议看一下《STM8S技术参考4102手册V4.pdf》主要了解个寄存器的1653作用!...
宕昌县13282403039: 谁有STM8L RTC的例程 - ?
柞寒氢溴: 最大差别: RB是128K flash, 20K RAM RC是256K flash, 48K RAM RC比RB还多几个功能模块
宕昌县13282403039: stm8s单片机编程 - ?
柞寒氢溴: 文件:main.c 用途:注意:内部8M晶振************************************************/#include unsigned char LED_table[]={0xFF,0x00,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF,0x00,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0...
宕昌县13282403039: stm8单片机中AD转换读取数据时这个语句怎么解释 bws - dat = ((ADC - DRH<<2) + ADC - DRL ); 得到十位的数据?
柞寒氢溴: bws_dat = ((ADC_DRH<<2) + ADC_DRL ); //得到十位精度的数据 就是将ADC_DRH这个寄存器的内容左移两位(至于为什么只移两位,可以找相应的datasheet看一下.或许bit8和bit9在这个寄存器的最高二位),然后与ADC_DRL这个寄存器相加,总共得到10位数据.bws_dat应该是一个短整型或整型.
宕昌县13282403039: STM8 外部中断设置问题(如图) - ?
柞寒氢溴: I1 I0不能直接写,只能通过开中断或关中断来写,上电默认是11; 当用指令开中断时( _asm("rim\n");),为00 当发生中断时,由当前中断的(ITC_SPRx) 载入I[1:0],主要用于做中断嵌套; 退出中断自动清0; 因此在写EXTI_CR1,需将ITC_SPRx配置到11,或加入禁中断指令
宕昌县13282403039: stm8s芯片的按键检查程序怎么写啊?我写的按键是芯片没反应,望高手给给调试成功的程序参考下 - ?
柞寒氢溴: 首先,按键的硬件电路,按键不按的时候常高或者常低,按钮按下产生1个跳变,下降沿或者上升沿.然后,软件部分,将这个IO口配置为输入模式,带中断功能,再然后编写中断事件即可,比如让一个LED灯亮,或者串口输出.有问题可以用ST-LINK连接看看,Debug可以单步运行查看进度的,比51的年代强太多了
宕昌县13282403039: 关于STM8单片机 - ?
柞寒氢溴: 函数体中的变量称为局部变量,编译器并不会给局部变量分配一个固定地址,一般是放在寄存器中,如果寄存器不够用的话,是放到堆栈中的.main()也是一个函数,所以你这种情况很有可能是你定义的局部变量被放到了寄存器中.可以看反汇编来确定有没有使用这个变量.你定义的变量,不管是局部变量还是全局变量,如果 你没有使用它,编译器在链接时会忽略掉该变量,这是编译器的优化策略,可以节省RAM.这种情况下你在仿真时完全看不到该变量.
宕昌县13282403039: stm8 怎么flash - ?
柞寒氢溴: 看逻辑地址是否统一编址.FLASH,RAM在同一个逻辑地址空间的,都是直接用用const,如arm,stm8,msp430等.FLASH,RAM逻辑地址空间分开的,要用其它办法,通常是特殊关键字,__flash,__code等.如AVR,8051等.注:const本身并没...