OpenEdv-开源电子网

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

[新手求助] 把RT-Thread Nano移植到F103RC之后,不能正常点亮LED问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2021-3-16
在线时间
1 小时
发表于 2021-3-26 14:41:01 | 显示全部楼层 |阅读模式
1金钱
各位大佬, 如题:
板子上有两个LED灯, 一个蓝色,一个红色, 我想在RT-Thread Nano OS的两个thread里, 循环点亮和熄灭LED灯, 但是运行到蓝色LED灯灭之后,LED灯的状态就不变了, 问题出现在哪里了呢?
【这个Nano里, 没有使用heap】


#include "stm32f10x_gpio.h"
#include "myFunctions.h"
#include "stm32f10x.h"
#include <rtthread.h>

#define THREAD_PRIORITY         1
#define THREAD_STACK_SIZE       100
#define THREAD_TIMESLICE        100


//ALIGN(RT_ALIGN_SIZE)
static char thread1_stack[100];
static struct rt_thread thread1;
/* 线程1入口 */
static void thread1_entry(void *param)
{
    int count = 0;
        while (1)
        {
                if(count == 0)
                {
                        GPIO_SetBitx(GPIOA,GPIO_Pin_8); //Blue LED OFF
                        rt_thread_mdelay(1000);
                        count = 1;
                }
                else
                {
                        GPIO_ResetBitx(GPIOA,GPIO_Pin_8); //Blue LED ON
                        rt_thread_mdelay(1000);
                        count = 0;
                }
        }
}

static char thread2_stack[100];
static struct rt_thread thread2;
/* 线程2入口 */
static void thread2_entry(void *param)
{
    int count = 0;
        while (1)
        {
                if(count == 0)
                {
                        GPIO_SetBitx(GPIOD,GPIO_Pin_2); //Red  LED OFF
                        rt_thread_mdelay(5000);
                        count = 1;
                }
                else
                {
                        GPIO_ResetBitx(GPIOD,GPIO_Pin_2); //Red  LED ON
                        rt_thread_mdelay(5000);
                        count = 0;
                }
        }
}


int main()
{
        rt_err_t retValue= 0;
       
        LED_GPIO_Init();
       
        rt_thread_mdelay(1000);
        GPIO_ResetBitx(GPIOA,GPIO_Pin_8); //Blue LED ON
        GPIO_ResetBitx(GPIOD,GPIO_Pin_2); //Red  LED ON

        rt_thread_mdelay(1000);
        rt_thread_mdelay(1000);
        rt_thread_mdelay(1000);

        /* 初始化线程1,名称是thread1,入口是thread1_entry */
        retValue = rt_thread_init(&thread1,"thread1",thread1_entry,RT_NULL,&thread1_stack[0],sizeof(thread1_stack),THREAD_PRIORITY, THREAD_TIMESLICE);
        retValue = rt_thread_startup(&thread1);
        if(retValue == RT_EOK)
                GPIO_SetBitx(GPIOA,GPIO_Pin_8); //Blue LED OFF    //-------------------------》 程序运行到了这里, 蓝色灯也熄灭了。

        /* 初始化线程2,名称是thread2,入口是thread2_entry */
        retValue = rt_thread_init(&thread2, "thread2",thread2_entry,RT_NULL,&thread2_stack[0],sizeof(thread2_stack),THREAD_PRIORITY, THREAD_TIMESLICE);
        retValue = rt_thread_startup(&thread2);
        if(retValue == RT_EOK)
                GPIO_SetBitx(GPIOD,GPIO_Pin_2); //Red  LED OFF   //-------------------------》 程序没有运行到了这里, 红色LED一直亮。

        return 0;
}


编译没有错误,下载到板子上,也能运行。
。。。。。。。
compiling board.c...
linking...
Program Size: Code=6780 RO-data=644 RW-data=128 ZI-data=2888  
FromELF: creating hex file...
".\Objects\LED_Test.axf" - 0 Error(s), 1 Warning(s).
Build Time Elapsed:  00:00:05


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2021-3-16
在线时间
1 小时
 楼主| 发表于 2021-3-29 09:11:03 | 显示全部楼层
现在LED灯能正常点亮了, 解决办法是: 把 RTT的 SysTick 从默认的1ms,改成了10ms, 把stack也加大到500bytes。
这样改,是因为我的板子主频太低了, 入门的板子

不过又出现新问题: delay函数有点不对了, 比如想要延时1s, delay函数的输入得是100, 不是1000, 不知道怎么改。。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2021-3-30 02:18:04 | 显示全部楼层
wzcfxu 发表于 2021-3-29 09:11
现在LED灯能正常点亮了, 解决办法是: 把 RTT的 SysTick 从默认的1ms,改成了10ms, 把stack也加大到500by ...

继续努力
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
434
金钱
434
注册时间
2013-3-18
在线时间
82 小时
发表于 2021-3-31 08:49:02 | 显示全部楼层
wzcfxu 发表于 2021-3-29 09:11
现在LED灯能正常点亮了, 解决办法是: 把 RTT的 SysTick 从默认的1ms,改成了10ms, 把stack也加大到500by ...

之前的问题主要是任务栈小了。中断改成10ms了,延时100不就是1秒吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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