zoukankan      html  css  js  c++  java
  • 添加相关功能

    第二章 添加相关功能

    本项目需要用到的板载资源包括: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时需要把输入输出方式配置为上升沿输入(而非推挽输出);其次是要配置外部中断的中断线,要求六个传感器之间不会相互干扰,故最好每个传感器的中断配置在不同的中断线上;最后还要配置中断相关的一些要求,比如中断优先级之类的;

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

    第三部分:读取颜色。

     

     

     

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

    声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。对于本博客如有任何问题,可发邮件与我沟通,我的QQ邮箱是:3074596466@qq.com
  • 相关阅读:
    Flex弹性布局在移动设备上的应用
    移动端页面开发问题总结
    js中的this关键字详解
    require.js 入门学习 (share)
    jQuery自定义滚动条样式插件mCustomScrollbar
    js中继承的几种用法总结(apply,call,prototype)
    js正则表达式
    js判断访问来源
    javascript 函数及作用域总结介绍
    javascript深入理解js闭包
  • 原文地址:https://www.cnblogs.com/CherishTheYouth/p/9604455.html
Copyright © 2011-2022 走看看