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:%d\r\n",times);
-
- if(KEY1==0)//KEY1??,??STM32 FLASH
- {
- save_eeprom();
- printf("\r\nsave.............\r\n");
- }
- 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:%d\r\n",i);
- display_number(i/100,2);
- // printf("%lf\r\n",k);
- }
- }
复制代码
所有资料51hei提供下载:
FreeRTOS_DEMO 20190109V1.0.7z
(319.74 KB, 下载次数: 159)
|