野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25920|回复: 9

STM32F103上跑uCOSII系统,串口问题

[复制链接]
发表于 2014-3-27 21:15:15 | 显示全部楼层 |阅读模式
在STM32F103上移植了uCOSII系统,LED任务成功,想把串口加入,但意外来了,下面是我的程序流程。

int main(void)
{
     BSP_INIT();//初始化硬件设置,配置,包括LED端口配置,串口的所有配置,包括中断配置。
     USART1_OUT("*--------这是向PC机发数据-----------*\r\n");//有了这条语句任务执行不了。
     OSInit();
     任务创建
     OSStart();
     return 0;
}

去掉向PC机串口发送数据这条语句就能够正常运行,不懂所以然,请大神指点一二。
回复

使用道具 举报

发表于 2014-3-27 21:58:16 | 显示全部楼层
进入你的这个函数看看啊,可能是卡死在标志位了,硬件仿真看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-27 22:00:03 | 显示全部楼层
没有卡死哦,数据可以成功发送至PC机,但任务不执行了。。。
回复 支持 反对

使用道具 举报

发表于 2014-3-28 08:44:26 | 显示全部楼层
ajungle 发表于 2014-3-27 22:00
没有卡死哦,数据可以成功发送至PC机,但任务不执行了。。。

你单步仿真看看它到底运行到哪一个语句不执行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 09:58:40 | 显示全部楼层
果然,任务没有被创建,而是卡死在了OSStartHang里面了。。不知道怎么解决,去掉打印后,一切都没问题,但打印函数又没错啊,裸机的时候都正常的。程序如下:
void USART1_OUT(char *sptr)
{
        unsigned char i = 0;
        unsigned int len = 0;
        len = strlen(sptr);
        for(i = 0;i < len;i++)
        {
                USART_SendData(USART1,sptr[i]);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
        }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 10:12:28 | 显示全部楼层
大神,帮忙分析下吧
回复 支持 反对

使用道具 举报

发表于 2014-3-28 10:15:43 | 显示全部楼层
ajungle 发表于 2014-3-28 09:58
果然,任务没有被创建,而是卡死在了OSStartHang里面了。。不知道怎么解决,去掉打印后,一切都没问题,但打 ...

你是全速是按下暂停,卡住,还是单步调试卡住。

好像ucos的部分代码是不支持单步执行的,需要全速来运行,不然会卡死。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 10:18:38 | 显示全部楼层
是单步的,我也试了下,断点打在创建任务的函数里面,没有进来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-28 10:52:15 | 显示全部楼层
原来问题还在这儿,但为啥向PC发送多个字符串,就不行了呢?我把注释的代码加上就不能建立任务,是为何解。,,,。。。
int main(void)
{
        BSP_Init();
       
        USART1_OUT("\r");
        USART1_OUT("****(C)COPYRIGHT 2014 嵌入式学习****\r\n");
        USART1_OUT("*          uCOSII-V2.86版本        *\r\n");
        USART1_OUT("*         STM32固件库为V3.5.0      *\r\n");
        USART1_OUT("*           Keil uVision4          *\r\n");
        USART1_OUT("*            2014-03-28            *\r\n");
//        USART1_OUT("*                                  *\r\n");
//        USART1_OUT("*                                  *\r\n");
//        USART1_OUT("*                                  *\r\n");
//        USART1_OUT("*                                  *\r\n");
//        USART1_OUT("*                                  *\r\n");
//        USART1_OUT("************************************\r\n");
//        USART1_OUT("*----------------------------------*\r\n");
        USART1_OUT("*==================================*\r\n");
        OSInit();
        OSTaskCreate(APP_TaskStart,0, &APP_Task_Stk[APP_TASK_STK_SIZE - 1], APP_TASK_PRIO);

        OSStart();  
    return 0;
}
回复 支持 反对

使用道具 举报

发表于 2014-3-28 11:56:52 | 显示全部楼层
ajungle 发表于 2014-3-28 10:12
大神,帮忙分析下吧

搞不懂,要不你把输出串口的这个语句放到初始化任务之后吧
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 06:44 , Processed in 0.032404 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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