用IAR测试STM8的PWM

发布者:深沉思考最新更新时间:2021-02-23 来源: eefocus关键字:STM8  PWM 手机看文章 扫描二维码
随时随地手机看文章

IAR测试STM8的PWM

板子上的LED1接在了PD3上,而PD3复用功能是TIM2_CC2,正好可以用来测试PWM功能。当然板上的另外2个LED也可以用,LED2对应PD2/TIM3_CC1,LED3对应PD0/TIM3_CC2。下面通过电位器来调整LED1的亮度。


源程序:


#i nclude

void CLK_init(void)

{

CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M

}

void GPIO_init(void)

{

PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出

PD_CR1 = 0x08; // 设置PD3为推挽输出

}

void TIM2_init(void)

{

TIM2_CCMR2 = 0x70; // PWM 模式 2

TIM2_CCER1 = 0x30; // CC2配置为输出

TIM2_ARRH = 0x03; // 配置PWM分辨率为10位,ARR=0x3FF

TIM2_ARRL = 0xFF; // PWM频率=8M/0x03FF=7820Hz

TIM2_CR1 = 0x01; // 计数器使能,开始计数

}

void ADC_init(void)

{

ADC_CSR = 0x03; // ADC输入引脚AIN3

ADC_CR1 = 0x01; // ADC开启

}

Run(void)

{

unsigned int value;

ADC_CSR &= ~0x80; // 清除EOC转换结束标志

ADC_CR1 |= 0x01; // 开始单次转换

while(!(ADC_CSR&0x80)); // 等待单次转换完成

value = ((int)ADC_DRH<<2); // 先读高8位,默认设置数据左对齐

value |= ADC_DRL; // 再读低8位

TIM2_CCR2H = (unsigned char)(value>>8); // 更新CC2比较寄存器

TIM2_CCR2L = (unsigned char)(value);

}

void init_devices(void)

{

asm("sim");

CLK_init();

GPIO_init();

TIM2_init();

ADC_init();

asm("rim");

}

void main( void )

{

init_devices();

while(1) Run();

}


关键字:STM8  PWM 引用地址:用IAR测试STM8的PWM

上一篇:STM8L TAB段式LCD液晶驱动程序
下一篇:【stm8s003系列例程】2 基本串口收发(中断接收方式)

推荐阅读最新更新时间:2024-11-17 21:59

STM32-(24):PWM基础
PWM是Pulse Width Modulation的缩写,即脉冲宽度调制。其通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。 PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制,用来对一个具体模拟信号的电平进行编码。等效的实现是基于采样定理中的一个重要的结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量即指窄脉冲的面积。这里所说的效果基本相同,是指该环节的输出响应波形基本相同。 如把各输出波形用傅里叶变换分析,则它们的低频段特性非常接近,仅在高频段略有差异。 为了实现a的效果,可以通过b这种正弦波去模拟达到这种效果。(通过每一段的面积相同
[单片机]
STM32-(24):<font color='red'>PWM</font>基础
浅谈利用单片机设计PWM脉冲信号发生器
PWM是脉冲宽度调制(Pulse Width Modulation)的英文缩写,它是开关型稳压电源中按稳压的控制方式分类中的一种,而脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。 简单的说,PWM是一种对模拟信号电平进行数字编码的方法。理论上讲就是电压或电流源以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的,通的时候就是电源被加到负载上,断的时候就是供电被断开的时候,所以PWM信号仍然是数字的。要想达到这样一种脉宽调制效果,模拟电压和电流时可以直接控制。例如音响的音量控制,在简单的模拟电路中,它的控制是由连接了一个可变电阻
[单片机]
浅谈利用单片机设计<font color='red'>PWM</font>脉冲信号发生器
用89C51和8254-2实际步进式PWM输出
    摘要: 介绍一种新型PWM输出的方式。它是用89C51作为主控部分,用8254-2可编程定时器/计数器来实现1Hz~3kHz步进式PWM的输出;具有分辨率高、反应速度快及占用CPU时间少的优点。     关键词: 8254-2 89C51 脉宽调制(PWM) 分辨率 引言 脉宽调制(PWM)技术最初是在无线电技术中用于信号的调制,后来在电机调速中得到了很好的应用。本设计中要求输出PWM从1Hz~3kHz步进式递增,单步为1Hz。由于89C51的时钟最大能取24MHz,单指令周期为0.5 μs ,计数频率为×10 6Hz。当输出2999Hz和3000Hz时,若采用89C51内部计数器来计数
[传感技术]
MSP430F149单片机能输出多少路PWM波?
在使用430的PWM波的时候,我一直有一个困惑,那就是它到底能输出几路PWM波?我想别的朋友可能也有相同的困惑,在我查找了好多资料之后最终搞懂了,下面分享一下学习经验。 首先,MSP430F149有两个16位的定时器Timer_A和Timer_B,其中TA有3个捕获比较单元,TB有7个捕获比较单元,产生PWM波需要将定时器配置在比较模式下,刚开始我以为既然TA有三个捕获比较模块,那么就应该有三个PWM波,结果怎么配置都无法产生TA1,后来在我仔细查看User's Guide才弄懂了,下面先上图: 上图说道:每个捕获、比较模块的输出可以产生PWM信号,每个输出根据EQU0和EQUX可以配置为8种模式。 我们知道
[单片机]
MSP430F149单片机能输出多少路<font color='red'>PWM</font>波?
M128 PWM程序
#include iom128v.h #include macros.h #define uint unsigned int #define uchar unsigned char void delay_ms(uint n) {uint i=0,j; while(i n) {for(j=0;j 1000;j++); i++; } } void pwm0_init(void) {DDRB=0X10; TCCR0=0X00; OCR0=0X7F; TCNT0=0; TCCR0=0X6C; } void main(void) {uchar wide; char temp; pwm0_init(); while(1) {delay
[单片机]
基于DSP控制的电压型PWM整流器
根据PWM整流电路的工作原理,分析了PWM整流控制方式,采用滞环电流控制方式,以TMS320F2812为控制器组建了电压型PWM整流器双闭环自动控制系统。实验结果表明,该系统具有良好的静态、动态性能。为设计PWM整流器提供了一定的理论依据。 关键词 PWM整流;滞环电流控制;DSP 工业中的变流器大多需要整流环节,以获得直流电压。常规的整流环节一般采用二极管布控整流或晶闸管相控整流,虽然电路简单、经济可靠,但存在以下问题:网侧电流波形严重畸变,造成功率因数低,最高功率因数约为0.8;大量无功功率的消耗会给电网带来额外负担,不仅增加了输电线路的损耗,而且严重影响了供电质量;输入电流中含有丰富的低次谐波电流,带来电网污染。而应用MOS
[电源管理]
基于DSP控制的电压型<font color='red'>PWM</font>整流器
STM8 HSI与HSE自动切换时钟源
实验平台:思修电子工作室 祥云小王子 开发版 int main( void ) { PI_DDR_DDR0=1;//配置PI0端口为输出模式 PI_CR1_C10=1; //配置PI0端口为推挽输出模式 PI_CR2_C20=0; //配置PI0端口低速率输出 led1=1; //PI0输出为高电平,D1熄灭 while(1) { //************HSI- HSE时钟自动切换流程及注释说明************ //如果CLK_CMSR中的主时钟源为HSI,则CLK_CMSR=0xE1 //如果CLK_CMSR中的主时钟源为LSI,则CLK_CMSR=0xD2 //如果CLK_CMSR
[单片机]
S5PV210定时器
在S5PV210内部,一共有4类定时器件。这4类定时器件的功能、特征是不同的。 1、PWM定时器 (1)这种是最常用的,平时所说的定时器一般指的是这个。像简单单片机(譬如51单片机)中的定时器也是这类。 (2)为什么叫PWM定时器,因为一般SoC中产生PWM信号都是靠这个定时器模块的。 2、系统定时器 (1)系统(指的是操作系统)定时器,系统定时器也是用来产生固定时间间隔(TCNT×时钟周期)信号的,称为systick,这个systick用来给操作系统提供tick信号。 (2)产生systick作为操作系统的时间片(time slice)的,一般是用在操作系统的调度系统下,用来做调度系统的进程间切换。 (3)一般做操作系统移
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved