历史上的今天
今天是:2025年02月23日(星期日)
2021年02月23日 | 用IAR测试STM8的PWM
2021-02-23 来源:eefocus
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(); }
史海拾趣
|
这东西正使用中80块淘回来的二手货,上次看一位会员争论汽车功放不是升压的,现发图片上来大家看看! 这东西12V输入通过DC TO DC电路升压为双18V供功放部分使用,看上去功率也有几十W放在房间音量还可以! xinxin2001 跟的贴图参考 ...… 查看全部问答> |
|
刚接触嵌入式驱动设计,公司设计了一个板子,用了 PTD0/LCD0~PTD3/LCD3 作为COM0~COM3 而PTD4/LCD4~PTD15/LCD15 作为S0~S12 我照freescale的文档做了初始化,可是在板子上调试时,没有任何反应, 请高手指点是为什么? #define CONFIG_LCD ...… 查看全部问答> |
|
我以前开发的产品用的都是wince5.0,所以我电脑上装的软件是 :PB5.0+EVC4.0+VC6.0,现在要用wince6.0了,我的问题是:装 VS 2005会不会影响我以前的CE5.0的工程、BSP等,我还能用PB5.0吗?还能用EVC4.0、VC6.0吗?我是否需要将以前的软件卸掉?最 ...… 查看全部问答> |
|
我有下面这段程序,send()子程序单独工作的时候是正常的,但是加入到主程序中时就出现问题, 我的主程序是一个频率计。主要问题是频率计的数码管显示不正常,串口能输出数据,但是数据是错误的。 #include unsigned char code dispbit[]={0xfe, ...… 查看全部问答> |




