添加相关功能

2019-09-11 14:37:45 浏览数 (1)

第二章 添加相关功能

本项目需要用到的板载资源包括:GPIO、串口3路、定时器中断、外部中断、

  1. GPIO配置
  2. 串口配置
    1. 串口初始化 下面给出三路串口的接收和发送对应的IO口:

串口号

发送(TX)

接收(RX)

debugUsart(USART1)

PA9

PA10

printUsart(USART2)

PA2

PA3

lcdUsart(USART3)

PB10

PB11

表 1串口管脚分布

在BSP.c文件中定义如下三个串口初始化函数,同时将这三行添加到BSP.h文件里,对函数进行声明:

(1) void debugUsartInit(u32 bound);

(2) void printUsartInit(u32 bound);

(3) void Usart3Init(u32 bound);

每段初始化函数里的内容可以直接复制粘贴例程里面的程序,这里只给出程序的截图,不再赘述其具体程序写法。

debugUsartInit()函数:

这里我们看到很多错误,这是因为与GPIO和USART相关的库还未添加进去的缘故,现在我们把这两个库添加到工程里来。步骤如下图:

保存,然后重新编译:

如图,发现仍有错误:

按照上面的办法把stm32f10x_rcc的.c和.h文件加进来,同时取消stm32f10x_conf.h中的注释,之后再重新编译,没有错误。

printUsartInit()

需要注意的是:串口1时钟挂载在RCC_APB2PeriphClock上,而串口2和串口3挂载在RCC_APB1PeriphClock上,所以初始化时记得区分。另外,图画中红色方框里的内容每个串口不同,需要注意。

Usart3Init()

  1. 串口中断 接下来为三个串口编写串口服务程序: 在新建工程模板章已经讲过,各个中断函数主要写在stm32f10x_it.c文件中下面分别介绍这三者的中断服务程序 debugUsart: 这部分主要做调试用,因此中断服务程序可以直接用正点原子例程中的程序,在这里不再赘述。 需要注意的是这几个参数的定义:

printUsart:

lcdUsart:

  1. 添加printf打印功能 在BSP.c中添加如下代码,并勾选use Microlib选项;
  1. 测试串口功能
    1. debugUsart: 代码: 现象:
    1. printUsart/lcdUsart 代码: 现象:
  2. sys功能 这个部分在例程里的SYSTEM下的sys文件夹下,只需要把sys.c和sys.h里的内容拷贝到BSP.c和BSP.h里即可。
  3. delay功能 本项目只需要用到毫秒级延时,而且不需要支持操作系统(OS),故本部分代码不需要完全拷贝例程里的代码,只需要以下两个函数:

在.c文件中也只需要加入相关函数的代码即可,把关于支持OS的代码全部阉割掉。代码如下:

配置好后进行测试: 主函数: 实验现象:

  1. 定时器中断 把例程里定时器中断里的初始化函数拷贝到BSP.c中,发现很多错误:

这是没有导入定时器的相关库导致的,按照亲前面介绍的方法把库导进去,然后把stm32f10x_conf.h中的定时器相关的宏定义取消注释,问题即可解决。

然后在stm32f10x_it.c中添加定时器的中断处理函数,代码如下:

定时器到这里就可以了。

  1. RTC实时时钟

RTC部分按照例程里面的代码添加就可以了,与上面的过程相同,同样,例程里的代码不一定全部都要,可以选择性舍弃。

如下是需要添加的函数的函数声明:

下面是实验结果:

  1. ADC部分

这部分同样直接按例程里的代码来添加,不再详细介绍,结果如下:

  1. FLASH模拟EPROM 同以上步骤,具体代码和结果不再赘述。
  2. 水阀和马达配置(GPIO) 头文件代码:

源文件代码:

管脚配置说明:

TAP0àPE8

MOTOR0àPE10

TAP1àPE9

MOTOR1àPE11

TAP2àPA5

MOTOR2àPB5

TAP3àPA6

MOTOR3àPB6

TAP4àPA7

MOTOR4àPB7

TAP5àPA8

MOTOR5àPB9

StosteMOTORàPE7

表 2 水阀和马达管脚分配表

  1. 颜色传感器配置

该项目共需要用到6路颜色传感器,每路颜色传感器共6个引脚,关于颜色传感器具的介绍和工作原理在这里不做具体介绍,下面列出具体管脚配置:

ColorSen0

S0àPC0

S1àPC1

S2àPC2

S3àPC4

OUTàPA0

ColorSen1

S0àPD0

S1àPD1

S2àPD2

S3àPD4

OUTàPB1

ColorSen2

S0àPE0

S1àPE1

S2àPE2

S3àPE4

OUTàPB2

ColorSen3

S0àPF0

S1àPF1

S2àPF2

S3àPF4

OUTàPG3

ColorSen4

S0àPG0

S1àPG1

S2àPG2

S3àPG4

OUTàPA4

ColorSen5

S0àPD7

S1àPD8

S2àPD9

S3àPD10

OUTàPE7

表 3 颜色传感器管脚分配

头文件:

S0-S3:

EXTI:

源文件:

S0-S3:

EXTI:

S0-S3 GPIO高低电平控制

iColor表示传感器编号, iPinx表示S0_S3的序号,iSwitch表示IO口高低电平控制;

白平衡:

读取R、G、B三个通道的值:

读取颜色:

中断处理函数:

颜色识别模块说明:

该模块主要分为三个部分:

第一部分:颜色传感器初始化,主要分为GPIO的配置和外部中断的配置两个部分;其中GPIO的配置和前面的水阀和马达配置相同,外部中断配置则主要分为三个部分,首先要配置好每个外部中断输入口的GPIO,因为该传感器是是检测到脉冲上升沿而开始触发中断的,所以在配置该GPIO时需要把输入输出方式配置为上升沿输入(而非推挽输出);其次是要配置外部中断的中断线,要求六个传感器之间不会相互干扰,故最好每个传感器的中断配置在不同的中断线上;最后还要配置中断相关的一些要求,比如中断优先级之类的;

第二部分:白平衡,就是告诉系统颜色是白色,给定一个白色环境,让颜色传感器读取这个白色并将其设置为标准的白色,然后读取其他颜色时,都以这个颜色为基准进行读取;

第三部分:读取颜色。

本项目需要用到的主要外设的配置,主要就是面这些内容了,还有串口屏和打印机的使用这里先不详细介绍,这两个部分,将在后面的章节进行说明。

0 人点赞