单片机
返回首页

STM32F103R8t6 FreeRTOS工程adc+flash模拟EEPROM源程序

2020-07-23 来源:51hei

STM32单片机源程序如下:

#include 'sys.h'

#include 'delay.h'

#include 'usart.h'

#include 'led.h'

#include 'FreeRTOS.h'

#include 'task.h'

#include 'ADC.h'

#include '74HC595.h'

#include 'key.h'

#include 'stmflash.h'




//const

u8 TEXT_Buffer[]={'0123456789'};





//任务优先级

#define START_TASK_PRIO                1

//任务堆栈大小        

#define START_STK_SIZE                 128  

//任务句柄

TaskHandle_t StartTask_Handler;

//任务函数

void start_task(void *pvParameters);


//任务优先级

#define LED0_TASK_PRIO                2

//任务堆栈大小        

#define LED0_STK_SIZE                 50  

//任务句柄

TaskHandle_t LED0Task_Handler;

//任务函数

void led0_task(void *pvParameters);


//任务优先级

#define LED1_TASK_PRIO                3

//任务堆栈大小        

#define LED1_STK_SIZE                 50  

//任务句柄

TaskHandle_t LED1Task_Handler;

//任务函数

void led1_task(void *pvParameters);


int main(void)

{

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4         

        delay_init();                                            //延时函数初始化         

        uart_init(115200);                                        //初始化串口

        LED_Init();                                                          //初始化LED

        My_ADC_Init();

        Display_74HC595_Init();

        KEY_Init();

        

        if(EEPROM_dat1.MASK != 0x50)

        {

                EEPROM_dat1.F_1=0;

                EEPROM_dat1.F_2=0;

                EEPROM_dat1.GL=0;

                EEPROM_dat1.P_offset=0;

                EEPROM_dat1.P_1=0;

                EEPROM_dat1.P_2=0;

                EEPROM_dat1.SL=0;

                EEPROM_dat1.MASK = 0x50;

                save_eeprom();

        }

          //创建开始任务

    xTaskCreate((TaskFunction_t )start_task,            //任务函数

                (const char*    )'start_task',          //任务名称

                (uint16_t       )START_STK_SIZE,        //任务堆栈大小

                (void*          )NULL,                  //传递给任务函数的参数

                (UBaseType_t    )START_TASK_PRIO,       //任务优先级

                (TaskHandle_t*  )&StartTask_Handler);   //任务句柄              

    vTaskStartScheduler();          //开启任务调度

}


//开始任务任务函数

void start_task(void *pvParameters)

{

    taskENTER_CRITICAL();           //进入临界区

    //创建LED0任务

    xTaskCreate((TaskFunction_t )led0_task,            

                (const char*    )'led0_task',           

                (uint16_t       )LED0_STK_SIZE,

                (void*          )NULL,                                

                (UBaseType_t    )LED0_TASK_PRIO,        

                (TaskHandle_t*  )&LED0Task_Handler);   

    //创建LED1任务

    xTaskCreate((TaskFunction_t )led1_task,   

                (const char*    )'led1_task',   

                (uint16_t       )LED1_STK_SIZE,

                (void*          )NULL,

                (UBaseType_t    )LED1_TASK_PRIO,

                (TaskHandle_t*  )&LED1Task_Handler);         

    vTaskDelete(StartTask_Handler); //删除开始任务

    taskEXIT_CRITICAL();            //退出临界区

}


int times=0;

//LED0任务函数

/*

修改之后保存,再读;如果修改之后直接读会覆盖掉修改的内容。

*/

void led0_task(void *pvParameters)

{

//        u8 datatemp[SIZE];

        int i;

    while(1)

    {

// LED0=~LED0;

                           

          vTaskDelay(300);


                                    if(KEY3==0)

                                  {        

                                         EEPROM_dat1.F_1++;

                                         vTaskDelay(100);

                                  }

//                                        times--;

//                        

//                                        //Half_show(times);

//                                        printf('KEY_times:%drn',times);

                                       

                                        if(KEY1==0)//KEY1??,??STM32 FLASH

                                        {

                                                 save_eeprom();

                                                 printf('rnsave.............rn');

                                        }

                                         if(KEY2==0)        //KEY0??,????????

                                        {

                                                 read_eeprom();

                                                printf('F_1:%x ',EEPROM_dat1.F_1);//????????

                                         

                                        }

                        

    }

}


//LED1任务函数

void led1_task(void *pvParameters)

{

        uint16_t i=0;

         double   k=0.02;

    while(1)

    {

        LED1=0;

        vTaskDelay(100);

        LED1=1;

        vTaskDelay(100);

                        

                   i = ADC_Value();

                   i =  i * (33000/4095);

    //  printf('ADC_Vaule:%drn',i);

                  display_number(i/100,2);

          //  printf('%lfrn',k);

    }

}


进入单片机查看更多内容>>
相关视频
精选电路图
  • 光控电路设计与分析

  • IGBT模块通过控制门极阻断过电流

  • CCFL的工作原理及电子驱动电路解析

  • 运算放大器IC741的基本工作原理及在电路中的实现方式

  • 一个简单的红外耳机电路

  • 基于TDA1554的立体声放大器电路

    相关电子头条文章