【STM32】常见问题解决2——串口printf无法打印数据,结构体如TIM_TimeBaseInitTypeDef无法找到

一. 问题描述

在使用仿真调试的时候,发现只要将printf函数添加上之后,就出现无法进入仿真的问题,程序即使下载到板子上,也无法更新程序
在这里插入图片描述

二.解决方法

在usart文件中,添加上与printf相关的函数,添加后编译烧录可正常进入仿真
在这里插入图片描述

#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _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 

三.问题扩展

在移植串口文件时,由于usart 文件重名的原因,移除旧的串口文件,出现新的函数找不到的问题,USART1_Config进入不了定义,程序正常编译和烧录,但是无法进入仿真
在这里插入图片描述
最后通过修改文件名,重新添加源文件,重新包含文件路径,可成功进入USART1_Config定义,并且正常编译和烧录,与仿真。

在这里插入图片描述

第二个问题

比如结构体无法找到
TIM_TimeBaseInitTypeDef
在这里插入图片描述

第二个问题解决

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TIM_TimeBaseInitTypeDef是一个结构体类型,用于配置定时器的基本参数。TIM_OCInitTypeDef是一个结构体类型,用于配置定时器的输出比较通道的参数。 TIM_TimeBaseInitTypeDef结构体包含以下成员: 1. uint16_t TIM_Prescaler:定时器的预分频值,用于控制定时器时钟频率的分频系数。 2. uint16_t TIM_CounterMode:定时器的计数模式,可以是TIM_COUNTERMODE_UP(向上计数)、TIM_COUNTERMODE_DOWN(向下计数)或TIM_COUNTERMODE_CENTERALIGNED1(中心对齐模式1)等。 3. uint16_t TIM_Period:定时器的自动重装载值,用于设置定时器的计数周期。 4. uint16_t TIM_ClockDivision:定时器的时钟分频因子,用于控制定时器时钟的分频系数。 5. uint16_t TIM_RepetitionCounter:重复计数器的值,用于设置重复计数模式下的重复次数。 TIM_OCInitTypeDef结构体包含以下成员: 1. uint16_t TIM_OCMode:输出比较通道的工作模式,可以是TIM_OCMODE_TIMING(定时模式)、TIM_OCMODE_ACTIVE(主动模式)或TIM_OCMODE_INACTIVE(被动模式)等。 2. uint16_t TIM_OutputState:输出比较通道的输出状态,可以是TIM_OUTPUTSTATE_DISABLE(禁用输出)或TIM_OUTPUTSTATE_ENABLE(使能输出)。 3. uint16_t TIM_OutputNState:互补输出比较通道的输出状态,可以是TIM_OUTPUTNSTATE_DISABLE(禁用互补输出)或TIM_OUTPUTNSTATE_ENABLE(使能互补输出)。 4. uint16_t TIM_Pulse:输出比较通道的脉冲值,用于设置输出比较通道的脉冲宽度。 5. uint16_t TIM_OCPolarity:输出比较通道的极性,可以是TIM_OCPOLARITY_HIGH(高电平有效)或TIM_OCPOLARITY_LOW(低电平有效)。 6. uint16_t TIM_OCNPolarity:互补输出比较通道的极性,可以是TIM_OCNPOLARITY_HIGH(高电平有效)或TIM_OCNPOLARITY_LOW(低电平有效)。 7. uint16_t TIM_OCIdleState:输出比较通道的空闲状态,可以是TIM_OCIDLESTATE_SET(设置空闲状态为高电平)或TIM_OCIDLESTATE_RESET(设置空闲状态为低电平)。 8. uint16_t TIM_OCNIdleState:互补输出比较通道的空闲状态,可以是TIM_OCNIDLESTATE_SET(设置空闲状态为高电平)或TIM_OCNIDLESTATE_RESET(设置空闲状态为低电平)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨同舟1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值