返回列表 发新帖本帖赏金 0.20元(功能说明)

[创新制造展示] 【21ic第三届设计大赛】+基于UCOSIII操作系统函数发生器设计

[复制链接]
3601|10
 楼主 | 2019-6-29 21:57 | 显示全部楼层 |阅读模式
本帖最后由 黄大队长 于 2019-6-29 22:03 编辑

                                                          基于UCOSIII操作系统函数发生器设计

    相逢总有千言,离别仅需二字。出来工作半年多了,工作挺忙的。刚注册了这个网站,就看到了这个活动,挺欣慰的!作为一名初级电子工程师,就用开发板简单的做了一个波形发生器。
    其主控使用STM32F4,DAC分辨率12位,幅度0-3.3V。由于工作时间限制,只能做简单的波形输出!
硬件:      UCOS-III操作系统
      STM32F4主频168MHZ
      4.3寸FTF-LCD
      12位DAC
      按键切换波形输出
      无线通讯串口LC12S
      波特率9600,将系统数据传至电脑监测

当然,第一步先搭建UCOS-III操作系统环境。哈哈哈哈
  1. #include "stm32f4xx.h"
  2. #include "sys.h"
  3. #include "includes.h"
  4. #include "os_app_hooks.h"
  5. #include "usart.h"
  6. #include "delay.h"
  7. #include "MYTASK.H"

  8. #include "lcd.h"
  9. #include "key.h"
  10. #include "RES.H"
  11. #include "led.h"
  12. #include "MOTOR.H"
  13. #include "PULL.H"
  14. #include "SHOES.H"
  15. #include "INFORMATION.H"
  16. #include "DAC.H"


  17. /**************开始任务参数配置**********************************************************/

  18. extern OS_TCB Start_Task_Lump;                     /*定义开始任务的任务块*/
  19. extern CPU_STK Start_Task_Stack[Start_Stack_Size]; /*定义开始任务的堆栈*/


  20. /**
  21.   * [url=home.php?mod=space&uid=247401]@brief[/url]   UCOSIII主程序
  22.   * [url=home.php?mod=space&uid=536309]@NOTE[/url]   
  23.   * @param   
  24.   * @retval  None   
  25.   */
  26. int main(void)
  27. {
  28.         OS_ERR err;          //错误类型结构体
  29.         
  30.         CPU_SR_ALLOC();      //这是一个宏定义  将CPU状态寄存器的值保存起来
  31.         delay_init(168);           //时钟初始化
  32.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置
  33.         
  34.         DAC_Output_Init();          //DAC通道初始化
  35.         Set_DAC1_OutputValue(0);    //0V输出
  36.         uart_init(9600);            //串口初始化
  37.         
  38.         System_Start_Information(0);//系统正在初始化
  39.         
  40.         Key_Init();             //按键初始化
  41.         Led_Init();             //LED初始化
  42.         LCD_Init();             //LCD初始化
  43.         LCD_Clear(WHITE);              //白底
  44.         POINT_COLOR = BLACK;                //黑字
  45.         LCD_ShowString(200,100,300,30,24,"STM32");
  46.         LCD_ShowString(100,130,300,30,24,"Simple Function Generator");
  47.         LCD_ShowString(190,160,300,30,24,"UCOS-III");
  48.         LCD_ShowString(180,200,200,30,24,"2019/06/24");        
  49.         POINT_COLOR = RED;                //红字
  50.         
  51. //        ALL_PWM_Init(200-1,168-1);
  52. //        System_Res();       //上电后所有动作复位
  53.         
  54.         OSInit(&err);               //os.h os_core.c 初始化UCOSIII
  55.         CPU_CRITICAL_ENTER();       //cpu.h 进入临界区 任务调度加锁 教程121
  56.         
  57.         OSTaskCreate ((OS_TCB        *)&Start_Task_Lump,                          /*任务控制块*/
  58.                                                                 (CPU_CHAR      *)"Start_Tack",                              /*任务名字*/
  59.                                                                 (OS_TASK_PTR    )Start_Tack,                                /*任务函数*/
  60.                                                                 (void          *)0,                                         /*传递给任务函数的参数*/
  61.                                                                 (OS_PRIO        )Start_Task_priority,                       /*任务优先级*/
  62.                                                                 (CPU_STK       *)&Start_Task_Stack[0],                      /*任务堆栈基地址*/
  63.                                                                 (CPU_STK_SIZE   )Start_Stack_Size/10,                       /*任务堆栈深度限位*/
  64.                                                                 (CPU_STK_SIZE   )Start_Stack_Size,                          /*任务堆栈大小*/
  65.                                                                 (OS_MSG_QTY     )0,                                         /*任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息*/
  66.                                                                 (OS_TICK        )0,                                         /*当使能时间片轮转时的时间片长度,为0时为默认长度*/
  67.                                                                 (void          *)0,                                         /*用户补充的存储区*/
  68.                                                                 (OS_OPT         )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,   /*任务选项 可以在OS.H选择*/
  69.                                                                 (OS_ERR        *)&err                                       /*存放该函数错误时的返回值*/
  70.                                                          );
  71.         
  72.         CPU_CRITICAL_EXIT();        //cpu.h 退出临界区 任务调度解锁 教程121
  73.         System_Start_Information(1);//系统初始化完成                                                        
  74.         OSStart(&err);              //UCOSIII开始运行
  75.         while(1);
  76.         
  77. }

  78. /**
  79.   * @}
  80.   */

  81. /**
  82.   * @}
  83.   */

  84. /**
  85.   * @}
  86.   */

  87. /**
  88.   * @}
  89.   */

  90. /************************ (C) COPYRIGHT HuangShihao *****END OF FILE****/
复制代码
  1. #include "DAC.H"

  2. /**
  3.   * [url=home.php?mod=space&uid=247401]@brief[/url] DAC通道1初始化
  4.   * [url=home.php?mod=space&uid=536309]@NOTE[/url]  用PA4作为模拟输出
  5.   * @param None
  6.   * @retval None   
  7.   */
  8. void DAC_Output_Init(void)
  9. {
  10.         GPIO_InitTypeDef GPIO_InitTypeDefStructure;
  11.         DAC_InitTypeDef  DAC_InitTypeDefStructure;
  12.         
  13.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
  14.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
  15.         
  16.         GPIO_InitTypeDefStructure.GPIO_Mode = GPIO_Mode_AN;
  17.         GPIO_InitTypeDefStructure.GPIO_Pin  = GPIO_Pin_4;
  18.         GPIO_InitTypeDefStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  19. //        GPIO_InitTypeDefStructure.GPIO_Speed = GPIO_Fast_Speed;
  20.         GPIO_Init(GPIOA,&GPIO_InitTypeDefStructure);
  21.         
  22.         DAC_InitTypeDefStructure.DAC_Trigger = DAC_Trigger_None;//没有触发方式
  23.         DAC_InitTypeDefStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;//不使用波形发生
  24.         DAC_InitTypeDefStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;//要和波形发生一起用 这里不需要配置
  25.         DAC_InitTypeDefStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;//不使能输出缓存关闭
  26.         DAC_Init(DAC_Channel_1,&DAC_InitTypeDefStructure);
  27.         
  28.         DAC_Cmd(DAC_Channel_1,ENABLE);//使能ADC1
  29.         DAC_SetChannel1Data(DAC_Align_12b_R,0);//右对齐方式 输出电压值为0
  30. }

  31. /**
  32.   * [url=home.php?mod=space&uid=247401]@brief[/url] DAC通道1输出值
  33.   * [url=home.php?mod=space&uid=536309]@NOTE[/url]  注意这里是12位输出格式 最大值为0-4096 但我们的参考电压为3.3v 因此请看@param注释
  34.   * @param ADC1_OutputValue 在这里选择范围为0-3300
  35.   * @retval None   
  36.   */
  37. void Set_DAC1_OutputValue(u16 ADC1_OutputValue)
  38. {
  39.         double ADC1_OutputValueTemp;
  40.         
  41.         ADC1_OutputValueTemp = ((double)ADC1_OutputValue/1000)*4096/3.3;
  42.         DAC_SetChannel1Data(DAC_Align_12b_R,ADC1_OutputValueTemp);
  43. }

  44. /**
  45.   * @brief 获取DAC通道1的值
  46.   * @note  None
  47.   * @param None
  48.   * @retval None   
  49.   */
  50. float Read_DAC1_Data(void)
  51. {
  52.         float OutputValue;
  53.         
  54.         OutputValue = (float)DAC_GetDataOutputValue(DAC_Channel_1)*(3.3/4096);
  55.         
  56.         return OutputValue;
  57. }
  58.         
  59. /**
  60.   * @}
  61.   */

  62. /**
  63.   * @}
  64.   */

  65. /**
  66.   * @}
  67.   */

  68. /**
  69.   * @}
  70.   */

  71. /************************ (C) COPYRIGHT HuangShihao *****END OF FILE****/
复制代码

复制代码
  1. void LCD_Init(void)
  2. {         
  3.   vu32 i=0;
  4.         
  5.   GPIO_InitTypeDef  GPIO_InitStructure;
  6.   FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  7.   FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
  8.   FSMC_NORSRAMTimingInitTypeDef  writeTiming;
  9.         
  10.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);//使能PD,PE,PF,PG时钟  
  11.   RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能FSMC时钟  
  12.       
  13.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PB15 推挽输出,控制背光
  14.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  15.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  16.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
  17.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  18.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 //PB15 推挽输出,控制背光
  19.         
  20.   GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);//PD0,1,4,5,8,9,10,14,15 AF OUT
  21.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  22.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  23.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  24.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  25.   GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化  
  26.         
  27.   GPIO_InitStructure.GPIO_Pin = (0X1FF<<7);//PE7~15,AF OUT
  28.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  29.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  30.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  31.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  32.   GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化  

  33.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PF12,FSMC_A6
  34.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  35.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  36.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  37.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  38.   GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化  

  39.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PF12,FSMC_A6
  40.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  41.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  42.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  43.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  44.   GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化

  45.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);//PD0,AF12
  46.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);//PD1,AF12
  47.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);
  48.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);
  49.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);
  50.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);
  51.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);
  52.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);
  53.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);//PD15,AF12

  54.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);//PE7,AF12
  55.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);
  56.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);
  57.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);
  58.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);
  59.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);
  60.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);
  61.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);
  62.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC);//PE15,AF12

  63.   GPIO_PinAFConfig(GPIOF,GPIO_PinSource12,GPIO_AF_FSMC);//PF12,AF12
  64.   GPIO_PinAFConfig(GPIOG,GPIO_PinSource12,GPIO_AF_FSMC);


  65.   readWriteTiming.FSMC_AddressSetupTime = 0XF;         //地址建立时间(ADDSET)为16个HCLK 1/168M=6ns*16=96ns        
  66.   readWriteTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(ADDHLD)模式A未用到        
  67.   readWriteTiming.FSMC_DataSetupTime = 60;                        //数据保存时间为60个HCLK        =6*60=360ns
  68.   readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
  69.   readWriteTiming.FSMC_CLKDivision = 0x00;
  70.   readWriteTiming.FSMC_DataLatency = 0x00;
  71.   readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A
  72.    

  73.   writeTiming.FSMC_AddressSetupTime =9;              //地址建立时间(ADDSET)为9个HCLK =54ns
  74.   writeTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(A               
  75.   writeTiming.FSMC_DataSetupTime = 8;                 //数据保存时间为6ns*9个HCLK=54ns
  76.   writeTiming.FSMC_BusTurnAroundDuration = 0x00;
  77.   writeTiming.FSMC_CLKDivision = 0x00;
  78.   writeTiming.FSMC_DataLatency = 0x00;
  79.   writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A


  80.   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  这里我们使用NE4 ,也就对应BTCR[6],[7]。
  81.   FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
  82.   FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
  83.   FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
  84.   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
  85.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  86.   FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
  87.   FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
  88.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
  89.   FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;        //  存储器写使能
  90.   FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
  91.   FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
  92.   FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  93.   FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
  94.   FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

  95.   FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置

  96.   FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  // 使能BANK1
复制代码


第二步:创建任务
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]   UCOSIII 开始任务
  3.   * [url=home.php?mod=space&uid=536309]@NOTE[/url]    负责其他任务的创建
  4.   * @param   
  5.   * @retval  None   
  6.   */
  7. void Start_Tack(void *p_arg)
  8. {
  9.         OS_ERR err;
  10.         CPU_SR_ALLOC();
  11.         p_arg = p_arg;

  12.         CPU_Init();
  13. #if OS_CFG_STAT_TASK_EN > 0u
  14.    OSStatTaskCPUUsageInit(&err);                    /*打开统计任务*/              
  15. #endif
  16.         
  17. #ifdef CPU_CFG_INT_DIS_MEAS_EN                            /*如果使能了测量中断关闭时间*/  
  18.    CPU_IntDisMeasMaxCurReset();        
  19. #endif

  20. #if        OS_CFG_SCHED_ROUND_ROBIN_EN               /*当使用时间片轮转的时候*/   
  21.         OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);   /*使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5ms*/
  22. #endif               
  23.         
  24.         OS_CRITICAL_ENTER();        //进入临界区
  25.         
  26.         /*Led指示任务*/   
  27.         OSTaskCreate ((OS_TCB        *)&Led_Task_Lump,                            /*任务控制块*/
  28.                                                                 (CPU_CHAR      *)"Led_Tack",                                /*任务名字*/
  29.                                                                 (OS_TASK_PTR    )Led_Tack,                                  /*任务函数*/
  30.                                                                 (void          *)0,                                         /*传递给任务函数的参数*/
  31.                                                                 (OS_PRIO        )Led_Task_priority,                         /*任务优先级*/
  32.                                                                 (CPU_STK       *)&Led_Task_Stack[0],                        /*任务堆栈基地址*/
  33.                                                                 (CPU_STK_SIZE   )Led_Stack_Size/10,                         /*任务堆栈深度限位*/
  34.                                                                 (CPU_STK_SIZE   )Led_Stack_Size,                            /*任务堆栈大小*/
  35.                                                                 (OS_MSG_QTY     )0,                                         /*任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息*/
  36.                                                                 (OS_TICK        )0,                                         /*当使能时间片轮转时的时间片长度,为0时为默认长度*/
  37.                                                                 (void          *)0,                                         /*用户补充的存储区*/
  38.                                                                 (OS_OPT         )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,   /*任务选项 可以在OS.H选择*/
  39.                                                                 (OS_ERR        *)&err                                       /*存放该函数错误时的返回值*/
  40.                                                          );

  41. /*PullRod任务*/   
  42.         OSTaskCreate ((OS_TCB        *)&PullRod_Task_Lump,                        /*任务控制块*/
  43.                                                                 (CPU_CHAR      *)"PullRod_Tack",                            /*任务名字*/
  44.                                                                 (OS_TASK_PTR    )PullRod_Tack,                                                                              /*任务函数*/
  45.                                                                 (void          *)0,                                         /*传递给任务函数的参数*/
  46.                                                                 (OS_PRIO        )PullRod_Task_priority,                     /*任务优先级*/
  47.                                                                 (CPU_STK       *)&PullRod_Task_Stack[0],                    /*任务堆栈基地址*/
  48.                                                                 (CPU_STK_SIZE   )PullRod_Stack_Size/10,                     /*任务堆栈深度限位*/
  49.                                                                 (CPU_STK_SIZE   )PullRod_Stack_Size,                        /*任务堆栈大小*/
  50.                                                                 (OS_MSG_QTY     )0,                                         /*任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息*/
  51.                                                                 (OS_TICK        )0,                                         /*当使能时间片轮转时的时间片长度,为0时为默认长度*/
  52.                                                                 (void          *)0,                                         /*用户补充的存储区*/
  53.                                                                 (OS_OPT         )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,   /*任务选项 可以在OS.H选择*/
  54.                                                                 (OS_ERR        *)&err                                       /*存放该函数错误时的返回值*/
  55.                                                          );                        

  56.         OS_CRITICAL_EXIT();         //退出临界区
  57.         OSTaskDel((OS_TCB  *)0,                                                   /*删除开始任务自身*/
  58.             (OS_ERR  *)&err
  59.                                          );
  60. }
复制代码
到这一步就可以看到系统初始化成功数据打印至电脑,TFT-LCD显示系统界面:
326055d17694386182.png 125135d1769558a77d.png


第三步:利用任务调度输出方波、三脚波、锯齿波。(我这里只贴上方波的代码)并在TFT-LCD显示器上显示波形。
  1. /**
  2.   * @brief   led任务
  3.   * @note   
  4.   * @param   
  5.   * @retval  None   
  6.   */
  7. void Led_Tack(void *p_arg)
  8. {
  9.        u16 Hight;
  10.         
  11.         OS_ERR err;
  12.         
  13.         CPU_SR_ALLOC();       //这是一个宏定义  将CPU状态寄存器的值保存起来
  14.         p_arg = p_arg;
  15.         OS_CRITICAL_ENTER();        //进入临界区

  16.         
  17.         OS_CRITICAL_EXIT();         //退出临界区
  18.         
  19.         while(1)
  20.         {   
  21.    //方波
  22.            if(Wave_Direction == 0)
  23.             {
  24.                    Wave_Out = 0;
  25.                    Wave_Direction = 1;
  26.                    Wave_Dis = 800;
  27.             }
  28.             else
  29.              {
  30.                    Wave_Out = 3000;
  31.                    Wave_Direction = 0;
  32.                    Wave_Dis = 400;
  33.              }
复制代码
TFT-LCD显示器上显示波形:

598115d17684acd191.png
利用优利德110MH示波器进行显示结果:
601455d1769a48b21a.png 785955d1769c2790da.png
380605d1769e16e8d9.png

经历两个夜晚的战斗,只能完成一些简单的功能。希望大家多多支持,互相学习!

                                                                                                2019.06.29
                                                                                               于深圳龙岗
                                                                                               黄大队长  编



  

使用特权

评论回复

betway|备用网站榜单

小小电子爱好者 betway|备用网站了 0.20 元 2019-06-29
理由:支持

评论

山东电子小菜鸟 2019-7-1 09:31 回复TA
不错 来自山东人民的祝福 
| 2019-6-29 22:08 | 显示全部楼层
支持新来的

使用特权

评论回复
| 2019-6-29 22:09 | 显示全部楼层

使用特权

评论回复
 楼主 | 2019-6-29 22:12 | 显示全部楼层

谢谢!哈哈哈

使用特权

评论回复
 楼主 | 2019-6-29 22:13 | 显示全部楼层

使用特权

评论回复
| 2019-6-30 16:17 | 显示全部楼层
这是用了实时操作系统啊

使用特权

评论回复
| 2019-7-1 09:57 | 显示全部楼层

使用特权

评论回复
 楼主 | 2019-7-2 19:06 | 显示全部楼层
lihui567 发表于 2019-6-30 16:17
这是用了实时操作系统啊

是的,平时没有什么时间,只能晚上搞!

使用特权

评论回复

评论

lihui567 2019-7-3 08:38 回复TA
加油 
| 2019-8-4 16:01 | 显示全部楼层
厉害!!!

使用特权

评论回复
扫描二维码,随时随地手机跟帖
返回列表 发新帖 本帖赏金 0.20元(功能说明)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表