[第二期 空气质量分析仪]第1周作业 - part1

发布于 2019-08-27 23:23:20
很高兴参加此次活动,也是第一次参与,感觉压力比较大:Q,挤出时间看视频、看论坛、看熊大大的著作。之前一直整标准库,为了学习rtt,就奋不顾身的投入到HAL库的学习中,还不太习惯:L。还有待进一步的尝试、总结。
按照官网文档中bsp教程,恕我愚钝,花了3天还是没能结合CUBE MX把bsp搞出来,没办法我只有直接用rt-thread-v4.0.1.zip包里的bsp文件夹里的stm32f10x-HAL。在解压的文件夹里使用ENV工具,更改了硬件配置,这里我使用的stm32f103ve的最小系统板。如下图1所示,我指定了主控型号、开启了uart1和uart3(为以后另一个应用做准备)。图3所示,我更改了控制台的输出缓存。

更改配置.png图1 更改系统配置
输出.png 图2 更改控制台输出缓冲区 经过保存后,使用scons --target=mdk5命令后,便生成了一个基于stm32f103ve的工程了。如下图3所示。
空bsp.png图3 基于stm32f103ve的工程 目前该工程,除了具有rtt提供的OS功能以外,什么也没有。为此根据最小系统板载led资源(也为了验证该工程的正确性),为其添加编写一个驱动程序,并使用任务来访问该资源。 1. 主程序。 对板载LED的初始化,我起初是想放到board.c文件中,但是细看该文件的做用好像又不合适。于是先放到main函数中,准备下一次再将其添加到一个初始化任务中,让其在第一时刻被OS调用后,初始完板载硬件系统后,再让OS kill掉自身,应该合适些吧。
#include 
#include
/*
*************************************************************************
* 变量
*************************************************************************
*/
/* 定义线程控制块 */
static rt_thread_t led1_thread = RT_NULL;

/*
*************************************************************************
* 函数声明
*************************************************************************
*/
static void led1_thread_entry(void* parameter);

int main(void)
{
LED_GPIO_Config();

/* user app entry */
led1_thread = /* 线程控制块指针 */
rt_thread_create( "led1", /* 线程名字 */
led1_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
3, /* 线程的优先级 */
20); /* 线程时间片 */

/* 启动线程,开启调度 */
if (led1_thread != RT_NULL)
rt_thread_startup(led1_thread);
else
return -1;
}

/*
*************************************************************************
* 线程定义
*************************************************************************
*/

static void led1_thread_entry(void* parameter)
{
while (1)
{
LED1_ON;
rt_thread_delay(100); /* 延时100个tick */
rt_kprintf("led1_thread running,LED1_ON\r\n");

LED1_OFF;
rt_thread_delay(100); /* 延时100个tick */
rt_kprintf("led1_thread running,LED1_OFF\r\n");
}
}
2. bsp_led.h 。第一次使用HAL编写LED驱动文件,还是安装固件库的习惯,不知道这样行不行,还烦请各位批评指正:lol
#ifndef __LED_H
#define __LED_H

#include
#include
#include "stm32f1xx_hal.h"

/* 定义LED连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED引脚 */
#define LED1_GPIO_PIN GPIO_PIN_7

//#define PIN_LOW 0
//#define PIN_HIGH 1

/* 定义控制IO的宏 */
//#define LED1_OFF rt_pin_write(LED1_GPIO_PIN, PIN_HIGH); // 没有成功
//#define LED1_ON rt_pin_write(LED1_GPIO_PIN, PIN_LOW); // 没有成功

#define LED1_OFF HAL_GPIO_WritePin(GPIOE, LED1_GPIO_PIN, PIN_HIGH);
#define LED1_ON HAL_GPIO_WritePin(GPIOE, LED1_GPIO_PIN, PIN_LOW);

void LED_GPIO_Config(void);

#endif /* __LED_H */
3. bsp_led.c
#include 

void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;

__HAL_RCC_GPIOE_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
LED1_OFF;
}
4. 运行结果,如下图4所示。uart_led.png图4 运行结果 通过串口上位机的分析,证明基于rtt的该工程基本运转正确。



查看更多

关注者
0
被浏览
497
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友