本帖最后由 我爱下载 于 2018-10-22 13:45 编辑
外设单元pwm和uart的使用评测
测试pwm和uart外设单元,程序依据例程中TIM的PWM例程修改得到,评测主要内容为Uart作为标准输入输出外设接受用户的控制命令,打印程序运行状态,控制pwm按照设计要求改变占空比。Pwm设计为10KHz固定频率可变占空比方式输出,利用TIM3输出端子为PB4,占空比调整范围0%~100%。
对PWM初始化的理解:
对UART的修改:
在官方代码的基础上增加了输入获取功能,支持kbhit()和getchar()
添加如下代码:
- //重定向fgetc函数
- int fgetc(FILE*f)
- {
- while((UART1->CSR&UART_IT_RXIEN)==0);
- return (UART1->RDR & 0x00ff);
- }
- int kbhit(void)
- {
- if((UART1->CSR&UART_IT_RXIEN)==0)
- return 0;
- else return 1;
- }
复制代码
主程序代码的修改:
- while(1)
- {
- ledflushcount++;
- if(ledflushcount >= 100000)
- {
- ledflushcount = 0;
- D2_TOGGLE();
- }
- if(kbhit())
- {
- key = getchar();
- switch(key)
- {
- case 'a':
- {
- if(led0pwmval < 100)
- led0pwmval += 10;
- pwmtarget = PWM_PERCEND(led0pwmval);
- }
- break;
- case 's':
- {
- if(led0pwmval >= 10)
- led0pwmval -= 10;
- pwmtarget = PWM_PERCEND(led0pwmval);
- }
- break;
- }
- printf("PWM PER = %d %%\n", led0pwmval);
-
- }
- if(pwmtarget != pwmcurrent)
- {
- if(pwmtarget > pwmcurrent)
- pwmcurrent++;
- else if(pwmtarget < pwmcurrent)
- pwmcurrent--;
- TIM_SetCompare1(TIM3, pwmcurrent);
- }
- }
-
复制代码
执行效果:
通过不断的调大和调小占空比,红色小灯的亮度随着变亮和变暗。
此内容由EEWORLD论坛网友我爱下载原创,如需转载或用于商业用途需征得作者同意并注明出处