基于STM32F103C8T6使用STM32CUBEMX配置串口打印及中断

基于STM32F103C8T6使用STM32CUBEMX配置串口打印及中断

在前面的博客里写了STM32F103C8T6建立的最小系统的搭建。这次关于串口的配置是基于上次最小系统的基础上进行添加的。

STM32CUBEMX中配置串口

查看引脚表格

请添加图片描述
通过芯片的引脚表,我们知道串口1的引脚是PA9,PA10。

在STM32中找到串口的配置

请添加图片描述
请添加图片描述
请添加图片描述

在KEIL中添加打印调试代码

重写发送函数

void Usart_SendString(uint8_t *str)
{
	unsigned int k=0;
  do 
  {
      HAL_UART_Transmit(&huart1,(uint8_t *)(str + k) ,1,1000);
      k++;
  } while(*(str + k)!='\0');
  
}
//重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
	/* 发送一个字节数据到串口DEBUG_USART */
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 10);	
	
	return (ch);
}
 
//重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{		
	int ch;
	HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 10);	
	return (ch);
}

再添加如下代码

/*
 * 添加如下代码,则不需要在工程设置中勾选Use MicroLIB
*/
 
#pragma import(__use_no_semihosting)
 
struct __FILE
{
	int a;
};
 
FILE __stdout;
FILE __stdin;
void _sys_exit(int x)
{
	
}

重写回到函数

// 回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1) // 如果是USART1
    {
        if (RX_Data == 0x1) // 如果接收到0xA1
        {
            LED1_ON(); // 打开LED1
 
            HAL_UART_Transmit(&huart1, TX_Str2, sizeof(TX_Str2), 10000); // 阻塞性发送
 
            HAL_UART_Receive_IT(&huart1, &RX_Data, 1); // 接收一个字节之后,继续用中断的接收下一个字节
        }
        else if (RX_Data == 0x2) // 如果接收到0xA2
        {
            LED1_OFF(); // 关闭LED1

            HAL_UART_Transmit(&huart1, TX_Str3, sizeof(TX_Str3), 10000); // 阻塞性发送
 
            HAL_UART_Receive_IT(&huart1, &RX_Data, 1); // 接收一个字节之后,继续用中断的接收下一个字节
        }
        HAL_UART_Receive_IT(&huart1, &RX_Data, 1); // 写在if判断里面不好用,写在最后面
    }
}

调试结果如下

请添加图片描述

本工程源码下载

链接: https://download.csdn.net/download/weixin_39465496/88750520

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值