OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2965|回复: 5

新人关于使用FreeRTOS代码的问题

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-4-8
在线时间
3 小时
发表于 2018-4-8 13:41:56 | 显示全部楼层 |阅读模式
1金钱
各位大侠好,本人刚开始学习 stm32f103使用FreeRTOS ,今天给STM32F103C8T6的开发板写了一个DEMO(就是那种10几块的开发板),目标是接在PB12上的一个LED闪烁,但是上传代码后,LED长亮,请大侠们帮忙看看,问题在哪里,感觉学不下去了,环境是跟着左老师的视频搭建的,工程请看附件。在这里先谢过各位了,盼望赶快解决这个问题。

smt32f103c8t6_new.rar

735.42 KB, 下载次数: 54

LED闪烁

最佳答案

查看完整内容[请看2#楼]

#define xPortSysTickHandler SysTick_Handler 添加这个试试,如果出现错误,把之前的SysTick_Handler函数直接删除就好
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-4-8 13:41:57 | 显示全部楼层
#define xPortSysTickHandler        SysTick_Handler
添加这个试试,如果出现错误,把之前的SysTick_Handler函数直接删除就好
一分耕耘一分收获。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-4-8
在线时间
3 小时
 楼主| 发表于 2018-4-8 13:47:11 | 显示全部楼层
main.c代码如下:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "lcd.h"
#include "FreeRTOS.h"
#include "task.h"


//任务优先级
#define START_TASK_PRIO                1
//任务堆栈大小       
#define START_STK_SIZE                 128  
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);

//任务优先级
#define TASK1_TASK_PRIO                2
//任务堆栈大小       
#define TASK1_STK_SIZE                 128  
//任务句柄
TaskHandle_t Task1Task_Handler;
//任务函数
void task1_task(void *pvParameters);

//任务优先级
#define TASK2_TASK_PRIO                3
//任务堆栈大小       
#define TASK2_STK_SIZE                 128  
//任务句柄
TaskHandle_t Task2Task_Handler;
//任务函数
void task2_task(void *pvParameters);

//LCD刷屏时使用的颜色
int lcd_discolor[14]={        WHITE, BLACK, BLUE,  BRED,      
                                                GRED,  GBLUE, RED,   MAGENTA,                
                                                GREEN, CYAN,  YELLOW,BROWN,                        
                                                BRRED, GRAY };

int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4         
        delay_init();                                            //延时函数初始化         
        uart_init(115200);                                        //初始化串口
        LED_Init();                                                          //初始化LED

       

        //创建开始任务
    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();           //进入临界区
    //创建TASK1任务
    xTaskCreate((TaskFunction_t )task1_task,            
                (const char*    )"task1_task",           
                (uint16_t       )TASK1_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )TASK1_TASK_PRIO,        
                (TaskHandle_t*  )&Task1Task_Handler);   

/*
          //创建TASK2任务
    xTaskCreate((TaskFunction_t )task2_task,     
                (const char*    )"task2_task",   
                (uint16_t       )TASK2_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK2_TASK_PRIO,
                (TaskHandle_t*  )&Task2Task_Handler);
*/

                vTaskDelete(StartTask_Handler); //删除开始任务
    taskEXIT_CRITICAL();            //退出临界区
}

//task1任务函数
void task1_task(void *pvParameters)
{
        u8 task1_num=0;
       

        while(1)
        {
                task1_num++;        //任务执1行次数加1 注意task1_num1加到255的时候会清零!!
                LED0=!LED0;
                printf("任务1已经执行:%d次\r\n",task1_num);

        vTaskDelay(1000);                           //延时1s,也就是1000个时钟节拍       
        }
}

/*
//task2任务函数
void task2_task(void *pvParameters)
{
        u8 task2_num=0;
       

        while(1)
        {
                task2_num++;        //任务2执行次数加1 注意task1_num2加到255的时候会清零!!
        //LED1=!LED1;

        vTaskDelay(1000);                           //延时1s,也就是1000个时钟节拍       
        }
}

*/

回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-4-8
在线时间
3 小时
 楼主| 发表于 2018-4-8 13:48:40 | 显示全部楼层
lcd.h如下:
#ifndef __LED_H
#define __LED_H         
#include "sys.h"

#define LED0 PBout(12)// PB5
//#define LED1 PEout(5)// PE5       

void LED_Init(void);//初始化

                                                     
#endif







LCD.c如下:


#include "led.h"


//初始化PB5和PE5为输出口.并使能这两个口的时钟                    
//LED IO初始化
void LED_Init(void)
{

GPIO_InitTypeDef  GPIO_InitStructure;
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能PB,PE端口时钟
       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;                                 //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_12);                                                 //PB.5 输出高



}




回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-4-8
在线时间
3 小时
 楼主| 发表于 2018-4-8 14:51:41 | 显示全部楼层
yklstudent 发表于 2018-4-8 14:05
#define xPortSysTickHandler        SysTick_Handler
添加这个试试,如果出现错误,把之前的SysTick_Handler函数 ...

你好,我把#define xPortSysTickHandler        SysTick_Handler 添加到main.c中了,但是还是不行,PB12的LED还是长亮,还有其他什么可能吗?谢谢
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-4-8
在线时间
3 小时
 楼主| 发表于 2018-4-8 15:00:18 | 显示全部楼层
原来是要放到FreeRTOSConfig.h中!! 多谢~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表