stm32的UART串口调试

所用模块

野火指南者开发板stm32f103vet6,JLINK烧录器,UART串口模块

搭建过程

先用cubemx生成项目,具体过程如下:

step1:

在这里插入图片描述

step2:

在这里插入图片描述

step3:

在这里插入图片描述

step4:

在这里插入图片描述

step5:

uart.c添加代码

int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,1000);
	return ch;
}
int fgetc(FILE *f)
{
	uint8_t ch;
	HAL_UART_Receive (&huart1 ,(uint8_t *)&ch,1,1000);
	return ch;
}

main.c添加代码

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
	printf(" receive data!\n");
	HAL_Delay(1000);
  }
  /* USER CODE END 3 */

调试bug

bug1 ☞ **JLink Info: T-bit of XPSR is 0 but should be 1. Changed to 1.

解决方法:这是由于JLINK供电不足导致的,需要供电线额外供电

bug2 ☞ 可以正常运行,但printf无法重定向(调试时,在printf语句左边设置断点,但运行时却直接跳过printf语句而进入HAL_Delay函数中)

解决办法:设置reset and run
在这里插入图片描述
在这里插入图片描述

总结

☞ JLINK烧录需要供电线额外供电
☞ 需要使用微库(勾选MicroLib)或使用标准库并在uart.c中添加如下代码

#if 1
#pragma import(__use_no_semihosting)             
                 
struct __FILE 
{ 
    int handle; 
}; 

FILE __stdout;         
void _sys_exit(int x) 
{ 
    x = x; 
}

int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,1000);
	return ch;
}
int fgetc(FILE *f)
{
	uint8_t ch;
	HAL_UART_Receive (&huart1 ,(uint8_t *)&ch,1,1000);
	return ch;
}

#endif

☞ 设置reset and run

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值