添加相关功能

第二章 添加相关功能

本项目需要用到的板载资源包括: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:

  2. 添加printf打印功能

    在BSP.c中添加如下代码,并勾选use Microlib选项;

  3. 测试串口功能

    1. debugUsart:

      代码:                            现象:

    2. printUsart/lcdUsart

      代码:                            现象:


  1. sys功能

    这个部分在例程里的SYSTEM下的sys文件夹下,只需要把sys.c和sys.h里的内容拷贝到BSP.c和BSP.h里即可。

  2. delay功能

    本项目只需要用到毫秒级延时,而且不需要支持操作系统(OS),故本部分代码不需要完全拷贝例程里的代码,只需要以下两个函数:

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

    配置好后进行测试:

    主函数:                            实验现象:


  3. 定时器中断

    把例程里定时器中断里的初始化函数拷贝到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时需要把输入输出方式配置为上升沿输入(而非推挽输出);其次是要配置外部中断的中断线,要求六个传感器之间不会相互干扰,故最好每个传感器的中断配置在不同的中断线上;最后还要配置中断相关的一些要求,比如中断优先级之类的;

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

第三部分:读取颜色。

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

原文地址:https://www.cnblogs.com/CherishTheYouth/p/9604455.html

时间: 2024-08-23 15:01:12

添加相关功能的相关文章

phpcms 移植【添加相关文章】功能

添加相关文章功能相当有用,移植一个过来基本上可以实现比较复杂的页面内包含分类功能,做二次开发时可以省下不少力气. 用例:如果一个产品,属于一个厂家,而这个厂家是动态添加的,既不是一个分类,而是一个厂家的模型,这二者关联的时候使用这个添加相关的功能可以轻易实现. 学会使用phpcms中的类别管理和推荐位管理基本上可以满足文章管理的多数场景,如果能够理解mysql表的设计,可以使用模型管理这个大杀器, 基本上能够想到的功能都能实现,最后再对[添加相关文章]功能进行设计和移植,模型功能能够再次爆发威力

自己主动升级系统的设计与实现(续2) -- 添加断点续传功能 (附最新源代码)

一.缘起 之前已经写了两篇关于自己主动升级系统OAUS的设计与实现的文章(第一篇.第二篇).在为OAUS服务端添加自己主动检測文件变更的功能(这样每次部署版本号升级时,能够节省非常多时间.并且能够避免手动改动带来的错误)后,有部分使用者又提出了一个非常好的建议:为OAUS添加断点续传功能.由于假设网络状态不是非常好,就常常会在升级到一半的时候,由于OAUSclient掉线而导致升级失败,这个时候,就必须又一次開始整个升级过程. 即使升级中断的时候.已经完毕了99%,也必须重头再来.所以,为OAU

06 DDMS的相关功能使用

DDMS的相关功能解析 Emulator Control: 进行发短信和打电话: File Explorer: 底层系统Linux文件系统的显示: Permissions:权限:关系到文件是否能删除 文件的导入导出.以及删除和添加: Allocation Tracker: 显示进程中内存资源的分配: Heap: 堆栈信息的统计: 可显示垃圾回收信息: Threads: 线程: 截屏功能:

MyReport报表引擎更新相关功能列表

release2.7.9.2 --修复Bug:解决图片控件外部资源释放问题 --修改功能:修改AIR环境打印接口,支持指定打印机,作业名称,打印份数 release2.7.9.1 --修改功能:修正数据类型是DisplayObject,ByteArray时,导出xls文件损坏 release2.7.9.0(发布) --修正Bug:条件样式的更多样式编辑无效 --新增功能:水印功能 --新增功能:打印显示表达式功能,打印函数 --修改功能:优化编辑器数字输入 release2.7.8.8(发布)

hexo next主题为博客添加分享功能

title: hexo next主题为博客添加分享功能 date: 2018-01-06 20:20:02 tags: [hexo博客, 博客配置] categories: hexo next主题配置 --- 今天心血来潮,决定给博客添加分享功能,百度上首先是找到了使用shareSDK的分享功能,最后在实践的过程中发现它添加时步骤比较多,添加完成后效果比较丑(就是一个长条的浅蓝色按钮),而且点击后想要退出分享比较麻烦(它的取消按钮实在太难找了,它在页面最下方的位置,呈现浅灰色,这个设计太反人类了

接入gitment为hexo添加评论功能

title: 接入gitment为hexo添加评论功能 toc: false date: 2018-04-16 10:59:56 categories: methods tags: hexo gitment 注册一个OAuth application 注册链接 其中: Application name 为应用名,取一个跟自己博客相关的名字即可: Homepage URL 为博客地址,例如我的为:https://mikqueenge.github.io: Application descripti

SQL数据同步到ELK(四)- 利用SQL SERVER Track Data相关功能同步数据(上)

一.相关文档 老规矩,为了避免我的解释误导大家,请大家务必通过官网了解一波SQL SERVER的相关功能. 文档地址: 整体介绍文档:https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-tracking-sql-server?view=sql-server-2017 Change Data Capture:https://docs.microsoft.com/en-us/sql/

跟陈湾来完善C++(2), 添加属性功能

上面几篇文章中,我们添加了名称空间优化,添加事件功能.这些对我来说其实已经够了.但还可以加一个属性功能. 当我们在C++中更改一个属性时,平常都是Get函数加上Set函数,但是这样,没有直接写一个成员变量方便.例如: a.SetValue(a.GetValue() + 1); 没有 a.Value = a.Value + 1; 方便. 但是这种方便只有在调用有属性功能的对象时才能使用.在创建属性的时候我还是用老套路,写一个Get和Set函数,该干啥还是干啥.我的属性功能其实就是在类中添加一个共有

【转】为Android应用添加搜索功能

为Android应用添加搜索功能 为Android应用增加搜索功能:增加搜索建议