CubeMX创建usart启动文件[嵌入式学习]

本文介绍了如何在STM32单片机上配置系统时钟、初始化USART1进行异步通信,并激活NVIC中断。通过添加特定的初始化文件,设置串口中断并实现printf和scanf的重定向,使得单片机能够与电脑上位机进行数据交互。同时,展示了如何编写中断服务函数来接收和回应上位机的数据,以及如何在main.c中使用printf进行字符输出。
摘要由CSDN通过智能技术生成

 所使用板子:野火指南者

配置系统时钟、调试方式之后,对connect下的usart1进行asynchronous(异步)激活,记得激活NVIC。记住此时GPIO初始化无法将USART1_RX的Pin10的普通输入模式改为复用输入。要在后续生成的.c文件中修改(usart的RX、TX是对GPIO相应Pin口的复用)。

打开keil后,先从别的地方找到对应芯片初始化文件,并添加。

编译之后即可使用函数跳转

 进入usart.c的usart结构体初始化中添加串口中断使能语句,选择产生中断的事件。

huart1为串口外设的句柄。

  __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);

在usart.c末尾添加printf和scanf的重定向函数。

在首部添加c语言标准库函数stdio.h才可使用printf和scanf。

//重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
	/* 发送一个字节数据到串口DEBUG_USART */
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);	
	
	return (ch);
}

//重定向c库函数scanf到串口DEBUG_USART,重定向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{		
	int ch;
	HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000);	
	return (ch);
}

因为是要将单片机与电脑上位机进行通信,所以要配置中断,将上位机发送的数据原封不动的送回去(中断服务函数名要在刚开始添加的startup_stm32f1xx.s文件中寻找)

void USART1_IRQHandler(void)
{
    uint8_t cu;

  if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)!=RESET)
  {
    cu = READ_REG(huart1.Instance->DR);
    WRITE_REG(huart1.Instance->DR,cu);  
  }  
}

其中所使用的READ_REG与WRITE_REG在stm32f1xx.h中存在,是分别是读取寄存器和向寄存器写入的功能。

到此时,主函数main.c中就可以使用printf函数进行字符输出给上位机

  printf("请输入下列字符控制LED\n");

 或者在串口调试助手的发送栏发送数据,串口接收后会在接收栏显示。

 可以使用如下两个函数实现printf相同的功能

  uint8_t a[]={"你好"};
  HAL_UART_Transmit(&huart1, (uint8_t *)&a, 4,  500);
/*****************  发送字符串 **********************/
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');
  
}

HAL_UART_Transmit函数为usart.h头文件中的发送函数。     不那么好用...........

后期可以使用getchar获得电脑上位机发送的字符,用以控制片上外设运行,记得字符的辨别要使用  ‘ ’ ,eg:

if(a == '2')
{
    。。。。。。
}

一切只是刚刚开始......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值