你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32的串口调试经验

[复制链接]
STMCU小助手 发布时间:2022-2-8 21:12
  STM32在使用串口时,有时需要使用串口输出来观察程序运行状态。这时,我们需要将printf进行重定向。
具体重定向方法为:
1、 添加printf的头文件   #include <stdio.h>
: d  x9 H- y. r  O* [2 m9 F" u1 \
2、重写int fputc(int ch, FILE *f)函数
( i, K" h( Y* n
int fputc(int ch, FILE *f);
函数
int fputc(int ch, FILE *f)
6 H0 |! {' Y0 j; C9 L  H- Q{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return ch;
) l  v9 p- M+ P3 f# c8 X: c}
3、修改一下选中Use MicroLIB   Target——Code Generation——选中Use MicroLIB
  M' u6 u( \4 u6 E- J. d

0 t% N7 P7 |5 x4 v
方法2,也可以避免使用半主机模式进行操作。
#if 1 #pragma import(__use_no_semihosting)            
//标准库需要的支持函数               
struct __FILE
{
  int handle;
};
FILE __stdout;       //定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{  
  x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
       while((USART1->SR&0X40)==0);//循环发送,直到发送完毕      
  USART1->DR = (u8) ch;      
  return ch;
}
#endif
0 P3 K$ \+ l- E* b
需要注意的还有自己的波特率,在stm32f10x.h中修改
& K( y& ^" m* V" U, q( A( \: q
#define HSE_VALUE    ((uint32_t)8000000) /*写自己板子的波特率即可,默认是没有的 */
#if !defined  HSE_VALUE5 `1 r$ ~! B, ~7 a) @! \
#ifdef STM32F10X_CL  
#define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */) S1 V+ p1 m: |" n; b1 x9 a
#else 1 u5 Q, n2 n3 o/ ^! G0 J
#define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */$ l, P& Z# D) S/ O+ f
#endif /* STM32F10X_CL */4 R1 F' J+ o& Y% c& q, q# n0 m
#endif /* HSE_VALUE */

/ ]/ _( [/ d& Z0 G9 U: Z9 \
赞 收藏 评论0 发布时间:2022-2-8 21:12

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版