380091044 发表于 2024-7-17 08:32:35

tzz1983 发表于 2024-7-16 22:41
嗯 , 是的, 就是用串口输出, 用串口助手查看.

一般来说, 硬件设计时 UART1的 P30 ,P31本来就用来ISP下 ...

仿真太难用了,硬仿和软仿我都用了,实在不想用,达不到自己要的效果,使用起来很不方便,我觉得你说的这个方法比仿真好用,我昨天也查了相关资料,感谢分享之路。

380091044 发表于 2024-7-17 08:44:15

hsrzq 发表于 2024-7-16 18:28
用printf的话有个小坑要注意一下。
我当时给OS任务切换用的是T0的NMI中断,printf用太多之后打印消息已经 ...

感谢提醒,信息量很大,我得慢慢消化,

380091044 发表于 2024-7-17 08:44:54

tzz1983 发表于 2024-7-16 22:30
不要使用 while(!TI) 这种方式就没问题, 我想就算这样使用也没问题,
你出问题可能是在如果在多个任务中使 ...

研究一下,感谢指点。

380091044 发表于 2024-7-17 08:48:39

tzz1983 发表于 2024-7-16 22:41
嗯 , 是的, 就是用串口输出, 用串口助手查看.

一般来说, 硬件设计时 UART1的 P30 ,P31本来就用来ISP下 ...

对于使用P3.0和P3.1口串口通信,我之前遇到,我烧写完程序,烧写线不拔掉,程序就出现异常,正常我是拔掉的,偶尔不拔掉时遇到这种情况

tzz1983 发表于 2024-7-17 11:00:13

本帖最后由 tzz1983 于 2024-7-17 11:04 编辑

380091044 发表于 2024-7-17 08:48
对于使用P3.0和P3.1口串口通信,我之前遇到,我烧写完程序,烧写线不拔掉,程序就出现异常,正常我是拔掉 ...
有两套电源同时存在,比如, 你系统是用的3.3V自带电源, 烧写器给5V的电源, 两套电源同时出现就会出问题 .

另外,如果有两套电源同时存在, 就算是电压相同也会出问题,
因为两套电源不会绝对相等,电压高的电源会对电压低的电源进行 “反充”, 严重时可能烧毁器件。
解决办法是,如果板自带电源, 去掉一LINK的VCC输出线,三线连接, 保存 GND, RX, TX ,即可

还有一种出问题的可能, P30 P31 除了用作串口外, 还用作了其它用途, 这个比较泛,看具体应用,说不清楚。

380091044 发表于 2024-7-17 16:09:33

tzz1983 发表于 2024-7-17 11:00
有两套电源同时存在,比如, 你系统是用的3.3V自带电源, 烧写器给5V的电源, 两套电源同时出现就会出问题 ...

分析的太到位了,这两个脚除了烧写程序,没有的别的用途,应该是电源的事,最近再测试就可以试一下了;不过,我用STM32F1的板子试过,烧程序和串口通信同时,两路供电是没有问题的,我记得有的烧写器供电不足,就需要两路同时供电,才能烧写,英飞凌的芯片是这样,时间久了,记忆也不一定对,记得是这样,

380091044 发表于 2024-7-18 14:47:56

tzz1983 发表于 2024-7-16 16:04
你学一学自己分析问题。
用 printf() 在程序运行关键点输出一些信息,以助于分析代码的运行轨迹。



这个我试了一下,真的太好用了,想知道哪个点执行不执行,以前我都是看效果,确实不知道是不是执行了,推荐大家使用,方便,串口1 :地、发送、接受三根线,不要电源,多接了电源,程序运行就异常了,再次感谢。

380091044 发表于 2024-7-19 08:53:43

printf打印乱码问题已经解决,设置问题

本帖最后由 380091044 于 2024-7-19 11:28 编辑

tzz1983 发表于 2024-7-16 22:30
不要使用 while(!TI) 这种方式就没问题, 我想就算这样使用也没问题,
你出问题可能是在如果在多个任务中使 ...
你的代码,我看了,也测试了,打印也是没问题的,同样的,我对比了熊仔的代码,打印测试这块写的也是有问题的,打印出来乱码,
他的代码如下:



DebugPrintf.c文件



/*************髡夔佽隴**************
婦漪printf垀剒滲杅ㄛ笭隅砃善揹諳怀堤ㄛ褫蚚衾覃彸湖荂陓洘.
******************************************/
#include "FreeRTOS.h"
#include "DebugPrintf.h"
#define Baudrate      9600L
#define TM            (65536 -(MAIN_Fosc/Baudrate/4))
#define PrintUart   1      //1:printf 妏蚚 UART1; 2:printf 妏蚚 UART2
/******************** 揹諳湖荂滲杅 ********************/
void DebugPrintfInit(void)
{
#if(PrintUart == 1)
      SCON = (SCON & 0x3f) | 0x40;
      AUXR |= 0x40;                //隅奀奀笘1T耀宒
      AUXR &= 0xFE;                //揹諳1恁寁隅奀1峈疏杻薹楷汜
      TL1= TM;
      TH1= TM>>8;
      TR1 = 1;                              //隅奀1羲宎數奀
//      P_SW1 = 0x00;//RXD/P3.0/13褐, TXD/P3.1/14褐
//      REN = 1;      //埰勍諉彶

//      SCON = (SCON & 0x3f) | 0x40;
//      T2L= TM;
//      T2H= TM>>8;
//      AUXR |= 0x15;   //揹諳1恁寁隅奀2峈疏杻薹楷汜
//      REN = 1;      //埰勍諉彶
#else
      P_SW2 |= 1;         //UART2 switch to: 0: P1.0 P1.1,1: P4.6 P4.7
      S2CON = (S2CON & 0x3f) | 0x40;
      T2L= TM;
      T2H= TM>>8;
      AUXR |= 0x14;            //隅奀2奀笘1T耀宒,羲宎數奀
//      S2CON |= (1<<4);    //埰勍諉彶
#endif
}

void UartPutc(unsigned char dat)
{
#if(PrintUart == 1)
      SBUF = dat;
      while(TI==0);
      TI = 0;
#else
      S2BUF= dat;
      while((S2CON & 2) == 0);
      S2CON &= ~2;    //Clear Tx flag
#endif
}


DebugPrintf.h文件如下:



#ifndef DEBUG_PRINTF_H
#define DEBUG_PRINTF_H

void DebugPrintfInit(void);

#endif


putchar.c文件如下:


/*************髡夔佽隴    **************
笭迡printf覃蚚腔putchar滲杅ㄛ笭隅砃善揹諳怀堤ㄛ褫蚚衾覃彸湖荂陓洘.
******************************************/
#include "FreeRTOS.h"

extern void UartPutc(unsigned char dat) reentrant;
char putchar(char c)
{
      UartPutc(c);
      return c;
}


上电初始化时,打印: printf("STC32G FreeRTOS 聆彸最唗!\r\n");
打印结果如下:



tzz1983 发表于 2024-7-19 15:15:00

380091044 发表于 2024-7-19 08:53
你的代码,我看了,也测试了,打印也是没问题的,同样的,我对比了熊仔的代码,打印测试这块写的也是有问 ...

发现新大陆了,惊喜不{:loveliness:},话说你是学生吗?

380091044 发表于 2024-7-20 07:44:22

tzz1983 发表于 2024-7-19 15:15
发现新大陆了,惊喜不,话说你是学生吗?

又惊又喜,看不同人的代码,犹如读不同书籍,很是过瘾,小学生级,都还没有入门呢,我是边工作,边学习,通过这几天研究,熊仔的代码问题已经解决了,移植还有问题,还在尝试中,感谢指点,你的代码真的,很不错,犹如托尔斯泰诗句,
页: 1 2 3 [4]
查看完整版本: UCOSII中使用OSTimeDly (INT32U ticks)延时,不进行任务切换?