双通道方波频率检测与倍频输出

2018-01-24  本文已影响0人  你的优先级最高

准备蓝桥杯嵌入式中,昨天与今天我写了写蓝桥杯第六届模拟题双通道方波频率检测与倍频输出(密码是5p0v),这道题目难度对于我来说比较大,写起来比较吃力。题目要求链接中;

基本要求

这道题目的大概意思是:

  1. PA1,PA2进行输入捕获,PA6,PA7输出相应的倍频PWM波,(这里没有牵扯占空比,实验室有函数发生器可以不写,但是从练习的角度就是很有必要的)
  2. 倍频系数可以通过按键与串口两种方式进行改变
  3. LED指示灯

这道题我刚开始做的时候就思考着怎么检测输入捕获,所以我的思路是:

  1. 进行配置一个引脚输出一个PWM波用作检测(我的是PA9)
  2. PA6,PA7输出倍频PWM波;一开始我采取PWM1模式进行输出,但是问题来了,这道题改变的可是频率,如果是PWM1模式,那么我们如何单独改变某一个通道输出的频率(没法);因此我采取的是Toggle模式(翻转),这样就可以很容易改变单通道输出PWM波的频率;(这里看出我的实力还是不够)
  3. 这道题用到串口发送,而这块蓝桥杯的板子只有串口可以直接与电脑连接(有点、、、、、、),因此我就直接配置了USART2(配置了Tx,PA2,这是个错误);后面我在调试的时候发送数据时卡死,就是这个问题,因为引脚的电平会相互影响,会出错,后面注释掉PA2的配置,但苦于没有好调试的方式、、、、、、
    后面直接显示在LCD上,心累;
  4. LED灯指示功能,这个相对较为成功,因为一开始的思路就是对的,下面附上代码:
void Control_Led(_Bool led0,_Bool led1,_Bool led2,_Bool led3)//控制led灯
{   
   u16 gpioC_pin = 0xffff;

   if(led0==1)gpioC_pin &= 0xfeff;
   else  gpioC_pin |= 0x0100;
   if(led1==1)gpioC_pin &= 0xfdff;
   else gpioC_pin |= 0x0200;
   if(led2==1)gpioC_pin &= 0xfbff;
   else gpioC_pin |= 0x0400;
   if(led3==1)gpioC_pin &= 0xf7ff;
   else gpioC_pin |= 0x0800;

   GPIOC->ODR = gpioC_pin; //送入GPIOC的引脚值
   GPIO_SetBits(GPIOD, GPIO_Pin_2);
   GPIO_ResetBits(GPIOD, GPIO_Pin_2);
}
上一篇下一篇

猜你喜欢

热点阅读