历史上的今天
今天是:2025年07月26日(星期六)
2019年07月26日 | STM32+freeRTOS学习笔记-1.使用cube MX创建一个freeRTOS的keil工程
2019-07-26 来源:eefocus
硬件:机智云STM32平台V2.1
软件:cube MX+keil MDK-ARM V5
机智云的STM32开发平台小巧玲珑,用起来也顺手,所以就将正点原子的战舰开发板扔一旁吃灰了。目前刚开始学习,用到的硬件资源也不多,后续做相关实验时说不准又捡起来了。
1.简单介绍一下cube MX的使用
下载安装的过程就不在赘述,直接开始使用。
双击打开cube MX,点击新建工程

由于本底板的MCU型号是:STM32F103C8T6,所以按照下图来选择就对了。这个根据当时自己使用的MCU型号来对应选择就好了。
接着就是资源配置界面了,

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

2、配置时钟系统,其实很简单,直接将HCLK设置为72MHz,其他的会根据此自动选择。这幅时钟配置图还是很直接明了,对学习STM32时钟系统有很好的借鉴意义。

3、配置对应的LED灯的端口GPIO为输出模式。
LED原理图:
接着在cube MX中配置对应的LED的IO为输出模式。



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

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

使用keil打开工程,找到main.c。如下,在while(1)中添加LED灯闪烁的代码。
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();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Call init function for freertos objects (in freertos.c) */
MX_FREERTOS_Init();
/* Start scheduler */
osKernelStart();
/* We should never get here as control is now taken by the scheduler */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
//自己添加的LED闪烁代码
HAL_Delay(400);
HAL_GPIO_WritePin(led1_GPIO_Port, led1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(led2_GPIO_Port, led2_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(led3_GPIO_Port, led3_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(led4_GPIO_Port, led4_Pin, GPIO_PIN_SET);
HAL_Delay(400);
HAL_GPIO_WritePin(led1_GPIO_Port, led1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(led2_GPIO_Port, led2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(led3_GPIO_Port, led3_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(led4_GPIO_Port, led4_Pin, GPIO_PIN_RESET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
编译得到hex文件,烧录到机智云的STM底板中,看到四个LED开始闪烁了。
至此,cube MX初体验完成。
总结一下:cube MX用起来非常顺手,尤其是添加一些中间件的时候,如RTOS 、 fatfs 、tcp/ip等等。真的是非常的方便,之前自己移植老半天,费劲不说,还经常出错。现在有了这个工具就轻松多了,但是带来的一点是库函数完全不一样了,至少我读写IO的函数是变了,不过不要紧,后续适应一下就行了。
开发工具越来越向着屏蔽硬件接口层的方向发展,从最初的寄存器编程到后来的库函数编程再到现在的图形界面编程,对嵌入式开发程序员的要求越来越低,入门门槛越来越低。对厂商推广自己的芯片固然是一件好事,但是于我们而言,自己接触底层的机会越来越少,真的底层出了问题,根本不会解。所以使用哪种方式来编程,仁者见仁智者见智。结合自己的实际环境适当选择吧。
下一节介绍如何基于此创建一个LED灯闪烁任务。
完!
史海拾趣
|
1. AVR单片机原理及应用 【内容简介】 本书在概述ATMEL公司开发的AT89系列、AT90系列、AT91M系列单片机之后,详细介绍了AVR增强型RISC单片机的结构、指令系统、90系列多种单片机、实用程序设计以及AVR单片机的应用实例,最后介绍了AVR单片机 ...… 查看全部问答> |
|
sdram的时序问题 state_cntrl_sig 在非idl_cycle下每个时钟加1 哪位高手能告诉我下为什么下面的state_cntrl_sig要计到那时候才变为空闲周期 WHEN idl_cycle => IF (cmnd_cycle_req = \'1\') THEN &nbs ...… 查看全部问答> |
|
哪位好心人帮帮忙!我是单片机初学者,ad转换不能显示,不知道问题出在哪里,还有电路图,请好心人帮忙解答一下!谢谢! LED_0 EQU 30H LED_1 EQU 31H &nbs ...… 查看全部问答> |
|
我现在自己做了块6410的板子,现在的情况是这样的:在三星提供的BSP中,NK有三种速度,第一种是532MHz,133MHz,66.5MHz,第二种是600MHz,150MHz,75MHz,第三种是666MHz,133MHz,66.5MHz。我用第1和第3种运行NK运行都有问题,刚开始就会出再好多报错, ...… 查看全部问答> |
|
国的多数读者对89C51系列的单片机是很熟悉的,为了加深对 MSP430 系列单片机的认识,我对两者进行一下比较。 第一,89C51单片机是 8 位单片机。其指令是采用的被称为“ CISC ”的复杂指令集,共具有 ...… 查看全部问答> |
|
传感器是能够受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置的总称,通常由敏感元件和转换元件组成。当传感器的输出为规定的标准信号时,则称为变送器。 变送器的概念是将非标准电信号转换为标准电信号的仪器,传感器则是 ...… 查看全部问答> |
|
紧急求助。 有朋友用过sim900A模块吗? 目前手里边就只有一个硬件设计手册,还有一个AT指令集。 貌似需要一个软件设计手册才够。 有哪位朋友曾经开发过,请给点意见。 时间很紧急呀。。。谢谢大家… 查看全部问答> |




