一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯

相信大部分人早期入门STM32系列单片机都是从各种例程入手的,STM32单片机繁多的寄存器已经不允许我们像学51系列单片机一样直接操作寄存器了(如果你记忆力好,或者愿意花很多时间翻芯片手册查看对应寄存器的则当我没说过哈),而早期的stm32基本都是运用标准库函数进行编程的,而如今ST公司为了在移植时的方便性推出了HAL库,并且开发了相应的开发软件Stm32CubeMX用于轻松配置所需要的功能外设等,不再需要像以前一样找各种外设例程拷贝各种外设是如何配置的了。
接下来让我们一步步学习如何使用STM32CubeMX,并尝试跑一跑freertos系统,跑系统的好处就不必多说了,最大的好处就是不用考虑过多的程序先后顺序和逻辑了,只需要将所需要的功能配置成各个任务执行就可以了。

1. 打开STM32CUBEMX后选择此项:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第1张图片

2.选择对应的使用的单片机型号,这里我使用的是STM32F103C8:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第2张图片
3.接下来进行单片机工作配置,首先配置晶振模式:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第3张图片
配置仿真烧录模式(这里选择SW模式,即到时候生成keil工程后选择SW烧录仿真):
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第4张图片
配置时钟:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第5张图片
4.进行功能外设的配置(包括一个IO口和一个UART串口):
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第6张图片
此时可以看到界面已经配置好一个IO管脚了,我们可以再次对其进行修改:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第7张图片
5.配置uart串口(此处由于我使用了串口中断,所以使能NVIC):
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第8张图片
使能串口中断(不使能到时候无法使用串口IT中断接收和发送功能):

一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第9张图片
6.移植freertos系统,并创建两个任务(只需创建多1个,初始已有1个):
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第10张图片
7.进行工程保存与转换的配置:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第11张图片
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第12张图片
8.保存工程并进行转换:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第13张图片
9.等待转换完成,到保存路径中打开对应程序工程:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第14张图片
10.对应工程进行程序修改:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第15张图片
查看main文件,可以看到串口1和PC13初始化已经帮我们初始化配置好了,我们要进行的操作仅仅是根据自身需求进行对应外设的功能操作(真方便呀!):
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第16张图片
可以看到freertos的两个任务也在main文件中,接下来我们就把任务1设置为PC13驱动LED灯闪烁,任务2则进行串口1的通信:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第17张图片
对应此部分代码也copy给各位吧:

void StartDefaultTask(void const * argument)
{
  /* USER CODE BEGIN 5 */
  /* Infinite loop */
  for(;;)
  {
    osDelay(500);//500Ϊ500ms
		HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//·­×ªPC13¿Úµçƽ
  }
  /* USER CODE END 5 */
}

/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
 	uint8_t rec_buf[8],send_buf[]={'r','e','c'};//ÅäÖÃ1¸ö½ÓÊÕÊý×飬1¸ö·¢ËÍÊý×é
	HAL_UART_Transmit(&huart1, "hello", 5,0xFFFF);//ʹÓô®¿Ú1·¢ËÍ"hello"×Ö·û´®£¬¶ÔÓ¦5¸ö×Ö½Ú£¬³¬Ê±·¢ËÍʱ¼äΪ0xFFFF
  HAL_UART_Receive_IT(&huart1,rec_buf,1);   //¿ªÆô´®¿Ú½ÓÊÕÖжϣ¬ÅäÖô®¿Ú1½ÓÊÕrec_bufÒ»¸ö×Ö½Ú
  for(;;)
  {
    osDelay(1);
		if(rec_buf[0]=='a')//µ±½ÓÊÕµ½Îª×Ö·û´®aʱ£¬·µ»ØÊä³ösend_buf,¼´Êä³örec
		{
			rec_buf[0]=0;
			HAL_UART_Transmit_IT(&huart1, send_buf, sizeof(send_buf));
		}
			HAL_UART_Receive_IT(&huart1,rec_buf,1);   
  }
  /* USER CODE END StartTask2 */
}

*大家是不是疑惑这些操作函数从哪来的呢,他们都在对应的.h文件中;
首先我们编译整个工程,让文件链接好,再点开+号项,就可以查看相关链接文件了,我们以查看GPIO操作函数为例:

一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第18张图片
*
11.程序烧录与结果(手上必须有烧录器和单片机,我的是cmsis-dap和stm32f103c8开发板,总成本40块左右,想自己动手而自己手头又没有的朋友可以去某宝上面逛逛):
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第19张图片

一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第20张图片
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第21张图片
在连接好硬件设备的情况下,单击此处进行程序烧录:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第22张图片
然后我们就可以复位单片机观察单片机的工作情况了,如果你们的LED灯跟我一样接在PC13口的话,可以看到LED灯以500ms的频率在亮灭闪烁,然后通过串口助手观察串口1是否工作正常:
一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯_第23张图片
可以看到复位单片机后接收区收到“hello”字符串,当我们以115200的波特率发送文本数据“a”,接收区可以正确收到“rec”。
好了,本次教程到此为止,第一次写得这么详细,希望各位都可以轻松上手!

你可能感兴趣的:(STM32,stm32,单片机,arm)