基于cubemx的STM32的freertos的串口通信

52 篇文章 0 订阅
3 篇文章 0 订阅

1、任务描述

               使用freertos系统实现电脑调试助手和正点原子开发板STM32F103ZET6的串口通信。

2、cubemx设置

3、程序代码

(1)添加usart1.c

#include "usart1.h"


#include "usart.h"

/**********重定义函数**********/

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 = (uint8_t) ch;
    return ch;
}






//串口1发送串口屏数据send_data
void	UserUart1Send(uint8_t	*send_data,uint8_t	send_len)
{
	while(send_len--)
	{
		HAL_UART_Transmit(&huart1,send_data++,1,20);
	}
}

(2)main.c中

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#include "usart1.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */


uint8_t Buffer[13]="hello world\r\n";

uint8_t pre_rec_buf[10];


uint8_t  flag=0;


/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void MX_FREERTOS_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

//接收回调函数---接收气压数值字符
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
	 

	if(huart==&huart1)
		{

//	  	HAL_UART_Receive_IT(&huart1,(uint8_t*)pre_rec_buf,20);
			  flag=1;
//       HAL_UART_Transmit_IT(&huart1,Buffer,sizeof(Buffer),11);
//		  	UserUart1Send(Buffer,sizeof(Buffer));
//			memset(pre_rec_buf,0,22);
			
//			count=0;
			
		
		}
		
		HAL_UART_Receive_IT(&huart1,(uint8_t*)pre_rec_buf,10);
		
	}


/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	
	HAL_UART_Receive_IT(&huart1,(uint8_t*)pre_rec_buf,10);

  /* USER CODE END 2 */

(3)freertos.c中

/* USER CODE END Header_usart_Task02 */
void usart_Task02(void *argument)
{
  /* USER CODE BEGIN usart_Task02 */
  /* Infinite loop */
  for(;;)
  {
		if(flag==1)
		{
			  UserUart1Send(Buffer,sizeof(Buffer));
		   	flag=0;
		}
		
		
//    osDelay(1);
  }
  /* USER CODE END usart_Task02 */
}

4、调试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jacklood

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

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

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

打赏作者

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

抵扣说明:

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

余额充值