嗯 , 是的, 就是用串口输出, 用串口助手查看.
一般来说, 硬件设计时 UART1的 P30 ,P31本来就用来ISP下 ...
仿真太难用了,硬仿和软仿我都用了,实在不想用,达不到自己要的效果,使用起来很不方便,我觉得你说的这个方法比仿真好用,我昨天也查了相关资料,感谢分享之路。 hsrzq 发表于 2024-7-16 18:28
用printf的话有个小坑要注意一下。
我当时给OS任务切换用的是T0的NMI中断,printf用太多之后打印消息已经 ...
感谢提醒,信息量很大,我得慢慢消化, tzz1983 发表于 2024-7-16 22:30
不要使用 while(!TI) 这种方式就没问题, 我想就算这样使用也没问题,
你出问题可能是在如果在多个任务中使 ...
研究一下,感谢指点。 tzz1983 发表于 2024-7-16 22:41
嗯 , 是的, 就是用串口输出, 用串口助手查看.
一般来说, 硬件设计时 UART1的 P30 ,P31本来就用来ISP下 ...
对于使用P3.0和P3.1口串口通信,我之前遇到,我烧写完程序,烧写线不拔掉,程序就出现异常,正常我是拔掉的,偶尔不拔掉时遇到这种情况 本帖最后由 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 除了用作串口外, 还用作了其它用途, 这个比较泛,看具体应用,说不清楚。
tzz1983 发表于 2024-7-17 11:00
有两套电源同时存在,比如, 你系统是用的3.3V自带电源, 烧写器给5V的电源, 两套电源同时出现就会出问题 ...
分析的太到位了,这两个脚除了烧写程序,没有的别的用途,应该是电源的事,最近再测试就可以试一下了;不过,我用STM32F1的板子试过,烧程序和串口通信同时,两路供电是没有问题的,我记得有的烧写器供电不足,就需要两路同时供电,才能烧写,英飞凌的芯片是这样,时间久了,记忆也不一定对,记得是这样, tzz1983 发表于 2024-7-16 16:04
你学一学自己分析问题。
用 printf() 在程序运行关键点输出一些信息,以助于分析代码的运行轨迹。
这个我试了一下,真的太好用了,想知道哪个点执行不执行,以前我都是看效果,确实不知道是不是执行了,推荐大家使用,方便,串口1 :地、发送、接受三根线,不要电源,多接了电源,程序运行就异常了,再次感谢。
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");
打印结果如下:
380091044 发表于 2024-7-19 08:53
你的代码,我看了,也测试了,打印也是没问题的,同样的,我对比了熊仔的代码,打印测试这块写的也是有问 ...
发现新大陆了,惊喜不{:loveliness:},话说你是学生吗? tzz1983 发表于 2024-7-19 15:15
发现新大陆了,惊喜不,话说你是学生吗?
又惊又喜,看不同人的代码,犹如读不同书籍,很是过瘾,小学生级,都还没有入门呢,我是边工作,边学习,通过这几天研究,熊仔的代码问题已经解决了,移植还有问题,还在尝试中,感谢指点,你的代码真的,很不错,犹如托尔斯泰诗句,