STM32+freeRTOS学习笔记-1.使用cube MX创建一个 freeRTOS的keil工程

STM32+freeRTOS学习笔记-1.使用cube MX创建一个 freeRTOS的keil工程

硬件:机智云STM32平台V2.1

软件:cube MX+keil MDK-ARM V5

机智云的STM32开发平台小巧玲珑,用起来也顺手,所以就将正点原子的战舰开发板扔一旁吃灰了。目前刚开始学习,用到的硬件资源也不多,后续做相关实验时说不准又捡起来了。

1.简单介绍一下cube MX的使用

下载安装的过程就不在赘述,直接开始使用。双击打开cube MX,点击新建工程

 

由于本底板的MCU型号是:STM32F103C8T6,所以按照下图来选择就对了。这个根据当时自己使

用的MCU型号来对应选择就好了。

 

接着就是资源配置界面了,

 

  1. 先配置RCC的时钟源为外部高速时钟

 

  1. 配置时钟系统,其实很简单,直接将HCLK设置为72MHz,其他的会根据此自动选择。这幅时钟

配置图还是很直接明了,对学习STM32时钟系统有很好的借鉴意义。

 

  1. 配置对应的LED灯的端口GPIO为输出模式。

LED原理图:

 

接着在cube MX中配置对应的LED的IO为输出模式。

 

 

 

 

接下来生成代码,同时也要保存此工程,方便下次接着添加相关功能。

 

 

 

最后点击“OK”,生成相关代码。

 

使用keil打开工程,找到main.c。如下,在while(1)中添加LED灯闪烁的代码。

    1. int main(void)
    2. {

3

 

4 /* USER CODE BEGIN 1 */

5

 

6

/* USER CODE END 1 */

7

 

8

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

10

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

13

    1. /* Configure the system clock */
    2. SystemClock_Config();

16

    1. /* Initialize all configured peripherals */
    2. MX_GPIO_Init();

19

/* USER CODE BEGIN 2 */

20 /* USER CODE BEGIN 2 */

21

22 /* USER CODE END 2 */

23

    1. /* Call init function for freertos objects (in freertos.c) */
    2. MX_FREERTOS_Init();

26

    1. /* Start scheduler */
    2. osKernelStart();

29

30 /* We should never get here as control is now taken by the scheduler */

31

    1. /* Infinite loop */
    2. /* USER CODE BEGIN WHILE */
    3. while (1)
    4. {
    5. //自己添加的LED闪烁代码
    6. HAL_Delay(400);
    7. HAL_GPIO_WritePin(led1_GPIO_Port, led1_Pin, GPIO_PIN_SET);
    8. HAL_GPIO_WritePin(led2_GPIO_Port, led2_Pin, GPIO_PIN_SET);
    9. HAL_GPIO_WritePin(led3_GPIO_Port, led3_Pin, GPIO_PIN_SET);
    10. HAL_GPIO_WritePin(led4_GPIO_Port, led4_Pin, GPIO_PIN_SET);
    11. HAL_Delay(400);
    12. HAL_GPIO_WritePin(led1_GPIO_Port, led1_Pin, GPIO_PIN_RESET);
    13. HAL_GPIO_WritePin(led2_GPIO_Port, led2_Pin, GPIO_PIN_RESET); 45

HAL_GPIO_WritePin(led3_GPIO_Port, led3_Pin, GPIO_PIN_RESET);

46

47 HAL_GPIO_WritePin(led4_GPIO_Port, led4_Pin, GPIO_PIN_RESET);

48

49 /* USER CODE END WHILE */

50

51 /* USER CODE BEGIN 3 */

52

    1. }
    2. /* USER CODE END 3 */

55

}

编译得到hex文件,烧录到机智云的STM底板中,看到四个LED开始闪烁了。至此,cube MX初体验完成。

总结一下:cube MX用起来非常顺手,尤其是添加一些中间件的时候,如RTOS 、 fatfs 、tcp/ip等等。真的是非常的方便,之前自己移植老半天,费劲不说,还经常出错。现在有了这个工具就轻松多了,但是带来的一点是库函数完全不一样了,至少我读写IO的函数是变了,不过不要紧,后续适应一下就行了。 开发工具越来越向着屏蔽硬件接口层的方向发展,从最初的寄存器编程到后来的库函数编程再到现在的图形界面编程,对嵌入式开发程序员的要求越来越低,入门门槛越来越低。对厂商推广自己的芯片固然是一件好事,但是于我们而言,自己接触底层的机会越来越少,真的底层出了问题,根本不会解。所以使用哪种方式来编程,仁者见仁智者见智。结合自己的实际环境适当选择吧。

下一节介绍如何基于此创建一个LED灯闪烁任务。

完!

weinxin
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。
Igor
  • 版权声明: 发表于 2019-01-1513:15:26
  • 转载注明:http://blog.tsingmac.com/prolions/creators/hardware/827/
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: