历史上的今天
今天是:2025年08月14日(星期四)
2020年08月14日 | STM8单片机PWM应用
2020-08-14 来源:elecfans
PD3复用功能是TIM2_CC2,正好可以用来测试PWM功能。本例程通过电位器调整PWM脉宽来调整接在PD3的LED1亮度。
#include
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开启
}
void 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单片机!
史海拾趣
|
针对短距离无线数据传输设备因高功耗而限制了工业应用这一问题,本文基于Freescale公司的MC13213硬件平台,对其低功耗的数据传输协议进行了研究,采用信标同步机制极大地降低了无线数据传输设备的功耗。 短距离无线数据传输是一种线缆替代技术 ...… 查看全部问答> |
|
// 打开 驱动 hFlashFile = CreateFile(TEXT(\"COM1:\"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); 我想请问我如何在com驱动中知道我打开的是COM1,还是其他COM,比如COM2/3 我想在驱动中获得打开了什么,然后我好根据这 ...… 查看全部问答> |
|
小弟要入个电脑 以前用的三星的都4年了 要上研究生了想换个用用 就上面三个牌子的 各位仁兄帮我推荐下吧 个人偏向于 IBM和苹果 但是身边没有人用苹果的 所以对苹果的性能不了 ...… 查看全部问答> |
|
请问DVB中BDA驱动如何与USB驱动进行通信? 比如我在应用层调频,BDA如何把调频信息通过USB传给硬件?数据又是如何从硬件传输的? 谢谢!… 查看全部问答> |
|
升级原来单片机的手持设备,用ARM7替换。原来字库存放在一片AM29F040 FLASH里。 现在用ARM跑,我觉得字不是很多,字比较少,大概200种。想用程序来写。请教思路。 前提是字模提取的方法不变,只是把存放到FLASH的字库用 程序来替换。 ...… 查看全部问答> |




