查看: 12544|回复: 27

[原创] 【智能生活-KE02Z】室内甲醛监测仪(功能完成)

[复制链接]
  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1514
    最后登录
    2018-5-28
    发表于 2016-9-2 19:58:54 | 显示全部楼层 |阅读模式
    本帖最后由 STM32LEARN 于 2016-9-4 18:07 编辑

    收到KE02Z几天了,一直没有时间,周末了,来完成以下作业!准备把新的在一贴内分多楼层完成。=======================================
    项目进度目录:
    一、晒板(本楼)
    二、测试——红灯闪烁(4楼)
    三、驱动LCD5110(5楼)
    四、LCD5110部分程序,带6x8字库(6楼)
    五、延时函数,采用systick(7楼)
    六、虚拟串口测试(8楼)
    七、FEE模式下虚拟串口(16楼)
    八、甲醛检测(17楼)
    九、HCHO程序(18楼)
    十、室内甲醛检测仪(功能完成(19楼)
    十一、甲醛检测完整工程(20楼)



    =======================================

    一、晒板
    不多说了,上图!

    QQ截图20160902194920.png

    QQ截图20160902194955.png

    QQ截图20160902195008.png




    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-17 08:07
  • 签到天数: 273 天

    连续签到: 1 天

    [LV.8]以坛为家I

    74

    主题

    2338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7515
    最后登录
    2021-8-30
    发表于 2016-9-2 20:41:29 | 显示全部楼层
    我们的板子都晒干了,但是最近没时间玩,希望楼主能分享更多例程
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1514
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-2 20:46:29 | 显示全部楼层
    anny 发表于 2016-9-2 20:41
    我们的板子都晒干了,但是最近没时间玩,希望楼主能分享更多例程

    我准备周末加加班,不知能到哪一步,共同加油
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1514
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-2 23:50:13 | 显示全部楼层
    二、测试——红灯闪烁
    使用CW10.6环境
    KE02Z的红色LED接到了PTH1上。
    新建工程
    QQ截图20160902233342.png
    选择CPU
    QQ截图20160902233403.png
    选择调试器
    QQ截图20160902233414.png
    选择语言
    QQ截图20160902233421.png
    选择使用PE
    QQ截图20160902233436.png
    生成工程
    QQ截图20160902233506.png
    使用高级模式
    QQ截图20160902233536.png
    设置ICS为39.0625
    QQ截图20160902233611.png
    配置时钟
    QQ截图20160902233640.png

    QQ截图20160902233657.png

    QQ截图20160902233711.png
    添加I/O
    QQ截图20160902233812.png
    配置PTH1
    QQ截图20160902233759.png
    写入测试代码
    QQ截图20160902234015.png
    生成srec文件
    QQ截图20160902234055.png

    QQ截图20160902234128.png
    编译
    QQ截图20160902234217.png
    可以将生成的文件(HEX)复制到开发板的存储器中,就可以看到红色led闪烁了!
    演示太简单了,就不上图了。

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1514
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-3 13:43:29 | 显示全部楼层
    三、驱动LCD5110
    接下来使用KE02Z驱动LCD5110,显示一个字符串
    电路接线如下
    QQ截图20160903132916.png
    新建CW工程
    QQ截图20160903132137.png
    PE中添加6个I/O组件
    QQ截图20160903132456.png
    如下
    QQ截图20160903132158.png
    配置为输出
    QQ截图20160903132351.png
    添加定时器组件
    QQ截图20160903132443.png
    使用systick,定时1ms中断
    QQ截图20160903132412.png

    QQ截图20160903132425.png
    配置CPU
    QQ截图20160903132238.png

    QQ截图20160903132324.png

    QQ截图20160903132335.png
    生成代码
    编写延时函数,使用systick
    QQ截图20160903132515.png

    QQ截图20160903132522.png
    编写LCD5110驱动函数
    QQ截图20160903132537.png

    QQ截图20160903132552.png

    编写字库文件
    QQ截图20160903132601.png

    QQ截图20160903132609.png

    systick中断函数
    QQ截图20160903132645.png
    主函数写入LCD5110测试代码
    QQ截图20160903132628.png
    编译运行下载,演示效果如下
    QQ截图20160903132041.png

    QQ截图20160903132108.png













    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1514
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-3 13:47:01 | 显示全部楼层
    四、LCD5110部分程序,带6x8字库


    1. /*
    2. * lcd5110.h
    3. *
    4. *  Created on: Sep 2, 2016
    5. *      Author: Administrator
    6. */

    7. #ifndef LCD5110_H_
    8. #define LCD5110_H_

    9. #include "font6x8.h"
    10. #include "Delay.h"
    11. #include "LED.h"
    12. #include "SCLK.h"
    13. #include "DIN.h"
    14. #include "DC.h"
    15. #include "RST.h"
    16. #include "SCE.h"

    17. #define HIGH TRUE
    18. #define LOW FALSE
    19. #define LCD_COMMAND 0
    20. #define LCD_DATA 1

    21. #define LCD5110_CS(state) (SCE_PutVal(state))
    22. #define LCD5110_RST(state) (RST_PutVal(state))
    23. #define LCD5110_DC(state) (DC_PutVal(state))
    24. #define LCD5110_DIN(state) (DIN_PutVal(state))
    25. #define LCD5110_SCK(state) (SCLK_PutVal(state))
    26. #define LCD5110_LED(state) (LED_PutVal(state))

    27. void LCD5110_init(void);
    28. void LCD5110_write_char(uint8_t c);
    29. void LCD5110_write_char_inv(uint8_t c);
    30. void LCD5110_clear(void);
    31. void LCD5110_set_XY(uint8_t X, uint8_t Y);
    32. void LCD5110_write_string(uint8_t *s);
    33. void LCD5110_write_Dec(uint16_t buffer);

    34. #endif /* LCD5110_H_ */
    复制代码

    1. /*
    2. * lcd5110.c
    3. *
    4. *  Created on: Sep 2, 2016
    5. *      Author: Administrator
    6. */


    7. #include "lcd5110.h"

    8. void LCD5110_LCD_write_byte(uint8_t dat, uint8_t LCD5110_MOde);

    9. /**
    10. * Initialize LCD module
    11. *
    12. * Input parameters : none
    13. * Return value   : none
    14. */
    15. void LCD5110_init(void)
    16. {
    17.   // Set pin initial state
    18.   LCD5110_LED(0); //Turn back light off
    19.   LCD5110_RST(0); //Set LCD reset = 0;
    20.   LCD5110_DC(1); //Mode = command;
    21.   LCD5110_DIN(1); //Set In at high level;
    22.   LCD5110_SCK(1); //Set CLK high;
    23.   LCD5110_CS(1); //Unselect chip;

    24.   //Keep reset pin low for 10 ms
    25.   Delay(10);
    26.   //Release Reset Pin
    27.   LCD5110_RST(1); //LCD_RST = 1;

    28.   //Configure LCD module
    29.   LCD5110_LCD_write_byte(0x21, LCD_COMMAND); //Extended instruction set selected
    30.   LCD5110_LCD_write_byte(0xB7, LCD_COMMAND); //Set LCD voltage (defined by experimentation...)
    31.   LCD5110_LCD_write_byte(0x14, LCD_COMMAND); //Set Bias for 1/48
    32.   LCD5110_LCD_write_byte(0x06, LCD_COMMAND); //Set temperature control (TC2)
    33.   LCD5110_LCD_write_byte(0x20, LCD_COMMAND); //Revert to standard instruction set
    34.   LCD5110_clear(); //Clear display (still off)
    35.   LCD5110_LCD_write_byte(0x0c, LCD_COMMAND); //Set display on in "normal" mode (not inversed)

    36. }
    37. /**
    38. * Write byte to the module.
    39. *
    40. * @param dat   data to write
    41. * @param mode  0 if command, 1 if data
    42. *
    43. * @retval    None
    44. */
    45. void LCD5110_LCD_write_byte(uint8_t dat, uint8_t mode)
    46. {
    47.   uint8_t i;
    48.   LCD5110_CS(0); //SPI_CS = 0;

    49.   if (0 == mode)
    50.     LCD5110_DC(0); //LCD_DC = 0;
    51.   else
    52.     LCD5110_DC(1); //LCD_DC = 1;

    53.   for (i = 0; i < 8; i++) {
    54.     LCD5110_DIN(dat & 0x80); //SPI_MO = dat & 0x80;
    55.     dat = dat << 1;
    56.     LCD5110_SCK(0); //SPI_SCK = 0;
    57.     LCD5110_SCK(1); //SPI_SCK = 1;
    58.   }

    59.   LCD5110_CS(1); //SPI_CS = 1;

    60. }

    61. /**
    62. * Write character to LCD at current position
    63. *
    64. * @param c: char to write
    65. * @retval None
    66. */
    67. void LCD5110_write_char(uint8_t c) {
    68.   uint8_t line;
    69.   uint8_t ch = 0;

    70.   c = c - 32;

    71.   for (line = 0; line < 6; line++) {
    72.     ch = font6_8[c][line];
    73.     LCD5110_LCD_write_byte(ch, LCD_DATA);

    74.   }
    75. }

    76. /**
    77. * Write character to LCD in inverse video at current location
    78. *
    79. * @param c: char to write
    80. * @retval None
    81. */
    82. void LCD5110_write_char_inv(uint8_t c) {
    83.   uint8_t line;
    84.   uint8_t ch = 0;

    85.   c = c - 32;

    86.   for (line = 0; line < 6; line++) {
    87.     ch = ~font6_8[c][line];
    88.     LCD5110_LCD_write_byte(ch, LCD_DATA);

    89.   }
    90. }

    91. /**
    92. * Write string to LCD at current position. String must be null terminated.
    93. *
    94. * @param s: string pointer
    95. * @retval None
    96. */
    97. void LCD5110_write_string(uint8_t *s) {
    98.   uint8_t ch;
    99.   while (*s != '\0') {
    100.     ch = *s;
    101.     LCD5110_write_char(ch);
    102.     s++;
    103.   }
    104. }

    105. /**
    106. * Clear display. Write 0 in all memory location.
    107. *
    108. * @param None
    109. * @retval None
    110. */
    111. void LCD5110_clear() {
    112.   uint8_t i, j;
    113.   for (i = 0; i < 6; i++)
    114.     for (j = 0; j < 84; j++)
    115.       LCD5110_LCD_write_byte(0, LCD_DATA);
    116. }

    117. /**
    118. * Set memory current location for characters (set coordinates).
    119. * Applies only for Fonts with a 6 pixels width.
    120. *
    121. * @param X: Column (range from 0 to 13)
    122. * @param Y: Row (range from 0 to 5)
    123. * @retval None
    124. *
    125. */
    126. void LCD5110_set_XY(uint8_t X, uint8_t Y) {
    127.   uint8_t x;
    128.   x = 6 * X;

    129.   LCD5110_LCD_write_byte(0x40 | Y, LCD_COMMAND);
    130.   LCD5110_LCD_write_byte(0x80 | x, LCD_COMMAND);
    131. }

    132. /**
    133. * Write integer to LCD
    134. *
    135. * @param b: integer to write
    136. * @retval None
    137. */
    138. void LCD5110_Write_Dec(uint16_t b) {

    139.   uint8_t datas[3];

    140.   datas[0] = b / 1000;
    141.   b = b - datas[0] * 1000;
    142.   datas[1] = b / 100;
    143.   b = b - datas[1] * 100;
    144.   datas[2] = b / 10;
    145.   b = b - datas[2] * 10;
    146.   datas[3] = b;

    147.   datas[0] += 48;
    148.   datas[1] += 48;
    149.   datas[2] += 48;
    150.   datas[3] += 48;

    151.   LCD5110_write_char(datas[0]);
    152.   LCD5110_write_char(datas[1]);
    153.   LCD5110_write_char(datas[2]);
    154.   LCD5110_write_char(datas[3]);
    155. }
    复制代码

    1. /*
    2. * font6x8.h
    3. *
    4. *  Created on: Sep 3, 2016
    5. *      Author: Administrator
    6. */

    7. #ifndef FONT6X8_H_
    8. #define FONT6X8_H_

    9. #include "stdint.h"

    10. extern uint8_t font6_8[][6];

    11. #endif /* FONT6X8_H_ */
    复制代码

    1. /*
    2. * font6x8.c
    3. *
    4. *  Created on: Sep 3, 2016
    5. *      Author: Administrator
    6. */

    7. #include "font6x8.h"

    8. uint8_t font6_8[][6] =
    9. {
    10.   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
    11.   { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
    12.   { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
    13.   { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
    14.   { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
    15.   { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
    16.   { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
    17.   { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
    18.   { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
    19.   { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
    20.   { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
    21.   { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
    22.   { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
    23.   { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
    24.   { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
    25.   { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
    26.   { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
    27.   { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
    28.   { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
    29.   { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
    30.   { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
    31.   { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
    32.   { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
    33.   { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
    34.   { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
    35.   { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
    36.   { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
    37.   { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
    38.   { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
    39.   { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
    40.   { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
    41.   { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
    42.   { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
    43.   { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
    44.   { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
    45.   { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
    46.   { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
    47.   { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
    48.   { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
    49.   { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
    50.   { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
    51.   { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
    52.   { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
    53.   { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
    54.   { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
    55.   { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
    56.   { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
    57.   { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
    58.   { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
    59.   { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
    60.   { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
    61.   { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
    62.   { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
    63.   { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
    64.   { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
    65.   { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
    66.   { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
    67.   { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
    68.   { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
    69.   { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
    70.   { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
    71.   { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
    72.   { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
    73.   { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
    74.   { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
    75.   { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
    76.   { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
    77.   { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
    78.   { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
    79.   { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
    80.   { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
    81.   { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
    82.   { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
    83.   { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
    84.   { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
    85.   { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
    86.   { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
    87.   { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
    88.   { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
    89.   { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
    90.   { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
    91.   { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
    92.   { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
    93.   { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
    94.   { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
    95.   { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
    96.   { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
    97.   { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
    98.   { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
    99.   { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
    100.   { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
    101.   { 0x00,0x00, 0x06, 0x09, 0x09, 0x06 }    // horiz lines
    102. };

    复制代码




    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1514
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-3 13:49:21 | 显示全部楼层
    五、延时函数,采用systick



    1. /*
    2. * Delay.h
    3. *
    4. *  Created on: Sep 3, 2016
    5. *      Author: Administrator
    6. */

    7. #ifndef DELAY_H_
    8. #define DELAY_H_

    9. #include "stdint.h"

    10. void IncTick(void);
    11. uint32_t GetTick(void);
    12. void Delay(volatile uint32_t nms);

    13. #endif /* DELAY_H_ */
    复制代码

    1. /*
    2. * Delay.c
    3. *
    4. *  Created on: Sep 3, 2016
    5. *      Author: Administrator
    6. */

    7. #include "Delay.h"

    8. volatile uint32_t uwTick;

    9. void IncTick(void)
    10. {
    11.   uwTick++;
    12. }

    13. uint32_t GetTick(void)
    14. {
    15.   return uwTick;
    16. }

    17. void Delay(volatile uint32_t nms)
    18. {
    19.   uint32_t tickstart = 0;
    20.   tickstart = GetTick();
    21.   while((GetTick() - tickstart) < nms)
    22.   {
    23.   }
    24.   
    25. }
    复制代码


    systick中断函数
    1. /*
    2. ** ===================================================================
    3. **     Event       :  SysTick_OnInterrupt (module Events)
    4. **
    5. **     Component   :  SysTick [FreeCntr]
    6. */
    7. /*!
    8. **     @brief
    9. **         This event is called when a compare matches the counter
    10. **         value (if compare or reload is selected as a interrupt
    11. **         source) or a counter overflows (for free-running devices).
    12. **         It is valid only when the component is enabled - <"Enable">
    13. **         and the events are enabled - <"EnableEvent">. The event is
    14. **         available only if <Interrupt service/event> is enabled.
    15. */
    16. /* ===================================================================*/
    17. void SysTick_OnInterrupt(void)
    18. {
    19.   /* Write your code here ... */
    20.   IncTick();
    21. }
    复制代码



    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1514
    最后登录
    2018-5-28
     楼主| 发表于 2016-9-3 15:14:15 | 显示全部楼层
    六、虚拟串口测试
    KE02Z开发板的调试器具有虚拟串口功能,下面来测试一下。

    测试发现使用ICS时钟时,存在偏差,可能通信失败!!!!!

    串口接口如下
    QQ截图20160903150425.png


    新建CW工程
    配置ICS为39.0625KHZ
    QQ截图20160903150254.png

    QQ截图20160903150323.png

    添加串口组件
    QQ截图20160903145854.png
    配置为UART1,参数配置如下
    QQ截图20160903145930.png

    QQ截图20160903145956.png

    编写测试代码,串口输出字符串
    QQ截图20160903150029.png
    编译下载运行
    QQ截图20160903150237.png
    可以看到上面的串口接收有问题,原因如何呢,是不是程序写错了?

    经过分析,其实程序没有错误,问题是:
    使用了ICS模块,时钟存在误差,而且由采用了39.0625的时钟,需要修正才可以使用。
    而KE02在出厂时,由厂家校准到31.25KHZ的频率,这个相对比较精确,于是修改时钟:
    QQ截图20160903145828.png
    再次编译下载,可以看到问题解决了!
    QQ截图20160903150054.png








    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    83

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    234
    最后登录
    2016-9-11
    发表于 2016-9-3 19:34:02 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-8-1 11:36
  • 签到天数: 96 天

    连续签到: 1 天

    [LV.6]常住居民II

    2

    主题

    670

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1543
    最后登录
    2017-11-16
    发表于 2016-9-3 21:00:53 | 显示全部楼层
    支持一下
    签到。。。。。。。。。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-21 04:43 , Processed in 0.106934 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表