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(); }
上一篇:STM8L TAB段式LCD液晶驱动程序
下一篇:【stm8s003系列例程】2 基本串口收发(中断接收方式)
推荐阅读最新更新时间:2024-11-17 21:59
设计资源 培训 开发板 精华推荐
- 物理3-2光敏实验
- syzygy-sgmii:SGMII 千兆以太网 PHY DP83867C 的分线板
- MC10XS3535 智能前角灯开关的简化应用图
- ADR440B 2.048 Vout 超低噪声、LDO XFET 电压基准的典型应用,具有电流吸收器和电流源
- 具有输出电池短路保护功能的 ADA4432-1 SD 视频滤波放大器的典型应用电路
- LTC3245EMSE 降压-升压型电荷泵稳压 5V 低噪声输出的典型应用电路
- LM2931 100 mA 的典型应用,用于固定输出稳压器
- Z-1100对讲机
- LTC1421CSW 演示板,热插拔电源排序电路(主电路)
- AL9910EV6,基于 AL9910 离线隔离式 LED 驱动器的评估板