【南京中科微CSM32RV20开发板试用体验】+3-adc DHT11的使用

描述

本文来源电子发烧友社区,作者:卢松涛, 帖子地址:https://bbs.elecfans.com/jishu_2249215_1_1.html

在"
【南京中科微CSM32RV20开发板试用体验】+2-oled rtc的使用"基础上增加adc DHT11


adc的使用:
    ///---- Chapter 11 ADC Test Init -------------------------------------------------------------------------------------

    uint32_t adc_result;
    uint32_t adc_pack[16];
    uint32_t adc_sum;
    uint32_t adc_count;
    uint32_t adc_avr;
    uint32_t voltage_avr;

    ADC_Init_case1();//内部基准,测PA4
    //ADC_Init_case2();//外部基准,测PA4


10000ms ADC->SEL = 3; //测量通道选择:3-PAD4
串口控制                             case 50://"2"
ADC->SEL = 0; //测量通道选择:0-PTAT 显示内部adc温度
DHT11的使用:
DHT11 GPIOB6
串口控制                case 49://"1"显示温度湿度



  1. #include "headfile.h"
  2.  
  3. #ifndef __OLEDFONT_H
  4. #define __OLEDFONT_H
  5. #define DHT11_REV_DATA  GPIO_Read(GPIOB,PIN6)
  6.  
  7.  
  8. //常用ASCII表
  9. //偏移量32
  10. //ASCII字符集
  11. //偏移量32
  12. //大小:12*6
  13.  
  14. /************************************6*8的点阵************************************/
  15. const unsigned char F6x8[][6] =
  16. {
  17.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
  18.     0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
  19.     0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
  20.     0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
  21.     0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
  22.     0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
  23.     0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
  24.     0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
  25.     0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
  26.     0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
  27.     0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
  28.     0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
  29.     0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
  30.     0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
  31.     0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
  32.     0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
  33.     0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
  34.     0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
  35.     0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
  36.     0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
  37.     0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
  38.     0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
  39.     0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
  40.     0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
  41.     0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
  42.     0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
  43.     0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
  44.     0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
  45.     0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
  46.     0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
  47.     0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
  48.     0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
  49.     0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
  50.     0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
  51.     0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
  52.     0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
  53.     0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
  54.     0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
  55.     0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
  56.     0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
  57.     0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
  58.     0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
  59.     0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
  60.     0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
  61.     0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
  62.     0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
  63.     0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
  64.     0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
  65.     0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
  66.     0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
  67.     0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
  68.     0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
  69.     0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
  70.     0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
  71.     0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
  72.     0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
  73.     0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
  74.     0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
  75.     0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
  76.     0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
  77.     0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
  78.     0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
  79.     0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
  80.     0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
  81.     0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
  82.     0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
  83.     0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
  84.     0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
  85.     0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
  86.     0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
  87.     0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
  88.     0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
  89.     0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
  90.     0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
  91.     0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
  92.     0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
  93.     0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
  94.     0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
  95.     0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
  96.     0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
  97.     0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
  98.     0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
  99.     0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
  100.     0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
  101.     0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
  102.     0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
  103.     0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
  104.     0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
  105.     0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
  106.     0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
  107.     0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
  108.     0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
  109. };
  110.  
  111. /****************************************8*16的点阵************************************/
  112. const unsigned char F8X16[]=
  113. {
  114.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//  0
  115.     0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
  116.     0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  117.     0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
  118.     0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
  119.     0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
  120.     0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
  121.     0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  122.     0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
  123.     0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
  124.     0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
  125.     0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
  126.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
  127.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
  128.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
  129.     0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
  130.     0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
  131.     0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
  132.     0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
  133.     0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
  134.     0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
  135.     0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
  136.     0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
  137.     0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
  138.     0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
  139.     0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
  140.     0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
  141.     0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
  142.     0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
  143.     0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
  144.     0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
  145.     0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
  146.     0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
  147.     0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  148.     0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  149.     0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  150.     0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  151.     0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  152.     0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  153.     0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  154.     0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  155.     0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  156.     0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  157.     0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  158.     0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  159.     0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  160.     0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  161.     0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  162.     0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  163.     0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  164.     0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  165.     0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  166.     0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  167.     0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  168.     0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  169.     0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  170.     0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  171.     0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  172.     0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
  173.     0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
  174.     0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,// 60
  175.     0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
  176.     0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  177.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
  178.     0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  179.     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
  180.     0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
  181.     0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
  182.     0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
  183.     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
  184.     0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
  185.     0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
  186.     0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
  187.     0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
  188.     0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
  189.     0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
  190.     0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
  191.     0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
  192.     0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
  193.     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
  194.     0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
  195.     0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
  196.     0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
  197.     0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
  198.     0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
  199.     0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
  200.     0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
  201.     0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
  202.     0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
  203.     0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
  204.     0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
  205.     0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
  206.     0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
  207.     0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
  208.     0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
  209. };
  210.  
  211. /***********************************************
  212. PCtoLCD2002设置
  213. 阴码,逆向,C51格式,十六进制数据,列行式,输出三个全选中
  214. 每行显示点阵9999,索引9999
  215. 格式:        段前缀                                        【无】;
  216.                 段后缀                                        【无】;
  217.                 注释前缀(右边空格去掉)        【/ *"】;
  218.                 注释后缀                                【",】;
  219.                 数据后缀                                【,】;
  220.                 行前缀                                        【{】;
  221.                 行后缀                                        【},】
  222.  
  223. **********************************************/
  224. /***********************************
  225. 16x16汉字
  226. 取字软件:PCtoLCD2002
  227. 使用方法见文档
  228. ***********************************/
  229. const unsigned char Chinese_Word_16[][32]= {
  230.  
  231.     {0x84,0x84,0xFC,0x84,0x84,0x40,0x64,0x54,0x4C,0x47,0x4C,0x54,0xE4,0x44,0x40,0x00,0x10,0x30,0x1F,0x08,0x08,0x00,0x1F,0x11,0x11,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00},/*"琦",0*/
  232.     {0x00,0x02,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x02,0x7E,0x02,0x02,0x00,0x00,0x01,0x01,0x01,0x3D,0x25,0x25,0x25,0x25,0x3D,0x41,0x81,0x7F,0x01,0x01,0x01,0x00},/*"哥",1*/
  233.     {0x00,0x40,0x20,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00},/*"牛",2*/
  234.     {0x40,0x40,0x42,0xCC,0x00,0x82,0xBA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBA,0x82,0x00,0x00,0x00,0x40,0x20,0x1F,0x20,0x5F,0x4A,0x4A,0x4A,0x4F,0x4A,0x4A,0x4A,0x5F,0x40,0x00},/*"逼",3*/
  235. };
  236.  
  237. #endif
  238. void mp_receive_data(uint8_t *buf, uint16_t *len)
  239. {
  240.         uint8_t rxlen = UART1_RX_CNT;
  241.         uint16_t i = 0;
  242.         *len = 0;                                //默认为0
  243.         Delay32M_ms(10);                //等待40ms,连续超过10ms没有接收到一个数据,则认为接收结束
  244.         if (rxlen == UART1_RX_CNT && rxlen) //接收到了数据,且接收完成了
  245.         {
  246.                 for (i = 0; i < rxlen; i++)
  247.                 {
  248.                         buf[i] = uart_dev.rxbuf[i];
  249.                 }
  250.                 *len = UART1_RX_CNT;        //记录本次数据长度
  251.                 UART1_RX_CNT = 0;                //清零
  252.                 uart_dev.frameok=1;                //标记完成一帧数据接收
  253. //          getData=0;  //数据接收完成,标志位清零
  254.         }
  255. }
  256. #define Max_Column        128
  257. void OLED_Write_IIC_Command(uint8_t IIC_Command)
  258. {
  259.     I2C_Write(0x00,IIC_Command);
  260.  
  261. }
  262. void OLED_Write_IIC_Data(uint8_t IIC_Data)
  263. {
  264.     I2C_Write(0x40,IIC_Data);
  265. }
  266. /**
  267.   * @brief        :OLED_Clear
  268.   * [url=home.php?mod=space&uid=1902110]@NOTE[/url]   :        --清屏函数
  269.                                 --清完屏,整个屏幕是黑色的!和没点亮一样
  270.   * @param        :        >>
  271.                                 >>
  272.   * @return        :void
  273.   *
  274.   * @date   :2021/01/29
  275.   * [url=home.php?mod=space&uid=44345]@design[/url] :
  276.   **/
  277. void OLED_Clear(void)
  278. {
  279.     uint8_t i,n;
  280.     for(i=0; i<8; i++)
  281.     {
  282.         OLED_Write_IIC_Command (0xb0+i);    //设置页地址(0~7)
  283.         OLED_Write_IIC_Command (0x00);      //设置显示位置—列低地址
  284.         OLED_Write_IIC_Command (0x10);      //设置显示位置—列高地址
  285.         for(n=0; n<128; n++)
  286.         {
  287.             OLED_Write_IIC_Data(0x00);
  288.         }
  289.     }
  290.         //更新显示
  291. }
  292. /**
  293.   * @brief        :OLED_Set_Pos
  294.   * @note   :        --坐标设置
  295.   * @param        :        >>
  296.                                 >>
  297.   * @return        :void
  298.   *
  299.   * @date   :2021/01/29
  300.   * @design :
  301.   **/
  302. void OLED_Set_Pos(uint8_t x, uint8_t y)
  303. {   OLED_Write_IIC_Command(0xb0+y);
  304.     OLED_Write_IIC_Command(((x&0xf0)>>4)|0x10);
  305.     OLED_Write_IIC_Command((x&0x0f));
  306. }
  307.  
  308. /**
  309.   * @brief        :OLED_ShowChar
  310.   * @note   :        --在指定位置显示一个字符,包括部分字符
  311.                                 --例如:OLED_ShowChar(20,6,'A',16);
  312.   * @param        :        >>
  313.                                 >>x:0~127
  314.                                 >>y:0~6
  315.                                 >>mode:0,反白显示;1,正常显示
  316.                                 >>size:选择字体 8/16
  317.   * @return        :void
  318.   *
  319.   * @date   :2021/01/29
  320.   * @design :
  321.   **/
  322. void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size)
  323. {
  324.     uint8_t c=0,i=0;
  325.     c=chr-' ';//得到偏移后的值
  326.     if(x>Max_Column-1) {
  327.         x=0;
  328.         y=y+2;
  329.     }
  330.     if(Char_Size ==16)
  331.     {
  332.         OLED_Set_Pos(x,y);
  333.         for(i=0; i<8; i++)
  334.             OLED_Write_IIC_Data(F8X16[c*16+i]);
  335.         OLED_Set_Pos(x,y+1);
  336.         for(i=0; i<8; i++)
  337.             OLED_Write_IIC_Data(F8X16[c*16+i+8]);
  338.     }
  339.     else
  340.     {
  341.         OLED_Set_Pos(x,y);
  342.         for(i=0; i<6; i++)
  343.             OLED_Write_IIC_Data(F6x8[c][i]);
  344.  
  345.     }
  346. }
  347.  
  348.  
  349. /**
  350.   * @brief        :OLED_ShowString
  351.   * @note   :        --显示一个字符号串
  352.                                 --例如:
  353.                                                 u8 SET[2][3] = {{"ON "},{"OFF"}};
  354.                                                 OLED_ShowString(0,0,SET[0],8);
  355.   * @param        :        >>
  356.                                 >>size:选择字体 8/16
  357.   * @return        :void
  358.   *
  359.   * @date   :2021/01/29
  360.   * @design :
  361.   **/
  362. void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
  363. {
  364.     while (*chr!='')
  365.     {   OLED_ShowChar(x,y,*chr,Char_Size);
  366.         x+=8;
  367.         if(x>120) {
  368.             x=0;
  369.             y+=2;
  370.         }
  371.         chr++;
  372.     }
  373. }
  374. /**********************************************
  375. //m^n函数
  376. **********************************************/
  377. uint32_t oled_pow(uint8_t m,uint8_t n)
  378. {
  379.     uint32_t result=1;
  380.     while(n--)result*=m;
  381.     return result;
  382. }
  383. /**
  384.   * @brief        :OLED_ShowNumber
  385.   * @note   :        --显示数字
  386.                                 --例如:OLED_ShowNumber(0,0,45125215,10);
  387.   * @param        :        >>x,y :起点坐标
  388.                                 >>len :数字的位数
  389.                                 >>size:字体大小默认16
  390.                                 >>num:数值(0~4294967295);
  391.   * @return        :void
  392.   *
  393.   * @date   :2021/01/29
  394.   * @design :
  395.   **/
  396. void OLED_ShowNumber(uint8_t x,uint8_t y,uint32_t num,uint8_t len)
  397. {
  398.     uint8_t size2 = 16;
  399.     uint8_t t,temp;
  400.     uint8_t enshow=0;
  401.     for(t=0; t;>
  402.     {
  403.         temp=(num/oled_pow(10,len-t-1))%10;
  404.         if(enshow==0&&t<(len-1))
  405.         {
  406.             if(temp==0)
  407.             {
  408.                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
  409.                 continue;
  410.             } else enshow=1;
  411.  
  412.         }
  413.         OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
  414.     }
  415. }
  416.  
  417. //初始化SSD1306
  418. void OLED_Init(void)
  419. {
  420.  
  421. //    OLED_GPIO_Init();
  422.     Delay32M_ms(1500);
  423. //    OLED_WR_Byte(0xAE,OLED_CMD);//--display off
  424. //    OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
  425. //    OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
  426. //    OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
  427. //    OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
  428. //    OLED_WR_Byte(0x81,OLED_CMD); // contract control
  429. //    OLED_WR_Byte(0xFF,OLED_CMD);//--128
  430. //    OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
  431. //    OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
  432. //    OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
  433. //    OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
  434. //    OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
  435. //    OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
  436. //    OLED_WR_Byte(0x00,OLED_CMD);//
  437. //    OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
  438. //    OLED_WR_Byte(0x80,OLED_CMD);//
  439. //    OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
  440. //    OLED_WR_Byte(0x05,OLED_CMD);//
  441. //    OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
  442. //    OLED_WR_Byte(0xF1,OLED_CMD);//
  443. //    OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
  444. //    OLED_WR_Byte(0x12,OLED_CMD);//
  445. //    OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
  446. //    OLED_WR_Byte(0x30,OLED_CMD);//
  447. //    OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
  448. //    OLED_WR_Byte(0x14,OLED_CMD);//
  449. //    OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
  450.     OLED_Write_IIC_Command(0xAE); //display off
  451.         OLED_Write_IIC_Command(0x20);        //Set Memory Addressing Mode
  452.         OLED_Write_IIC_Command(0x10);        //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
  453.         OLED_Write_IIC_Command(0xb0);        //Set Page Start Address for Page Addressing Mode,0-7
  454.         OLED_Write_IIC_Command(0xc8);        //Set COM Output Scan Direction
  455.         OLED_Write_IIC_Command(0x00); //---set low column address
  456.         OLED_Write_IIC_Command(0x10); //---set high column address
  457.         OLED_Write_IIC_Command(0x40); //--set start line address
  458.         OLED_Write_IIC_Command(0x81); //--set contrast control register
  459.         OLED_Write_IIC_Command(0xff); //亮度调节 0x00~0xff
  460.         OLED_Write_IIC_Command(0xa1); //--set segment re-map 0 to 127
  461.         OLED_Write_IIC_Command(0xa6); //--set normal display
  462.         OLED_Write_IIC_Command(0xa8); //--set multiplex ratio(1 to 64)
  463.         OLED_Write_IIC_Command(0x3F); //
  464.         OLED_Write_IIC_Command(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
  465.         OLED_Write_IIC_Command(0xd3); //-set display offset
  466.         OLED_Write_IIC_Command(0x00); //-not offset
  467.         OLED_Write_IIC_Command(0xd5); //--set display clock divide ratio/oscillator frequency
  468.         OLED_Write_IIC_Command(0xf0); //--set divide ratio
  469.         OLED_Write_IIC_Command(0xd9); //--set pre-charge period
  470.         OLED_Write_IIC_Command(0x22); //
  471.         OLED_Write_IIC_Command(0xda); //--set com pins hardware configuration
  472.         OLED_Write_IIC_Command(0x12);
  473.         OLED_Write_IIC_Command(0xdb); //--set vcomh
  474.         OLED_Write_IIC_Command(0x20); //0x20,0.77xVcc
  475.         OLED_Write_IIC_Command(0x8d); //--set DC-DC enable
  476.         OLED_Write_IIC_Command(0x14); //
  477.         OLED_Write_IIC_Command(0xaf); //--turn on oled panel
  478.  
  479. }
  480.  
  481. uint16_t Tempture=0;
  482. uint16_t Humi=0;
  483. //void DHT11_Init(void);
  484. //int DHT11_Read_Data(void);
  485. static void DHT11_SEND_DATA(uint8_t value)
  486. {
  487.     if(value==1)
  488.     {
  489.         GPIO_Write(GPIOB,PIN6,GPIO_SET);
  490.     }
  491.     else
  492.     {
  493.         GPIO_Write(GPIOB,PIN6,GPIO_RESET);
  494.     }
  495. }
  496. #if 0  //0---库函数  1---寄存器
  497. // DTH11  ---> PB6
  498. // 输出模式(GPIOB,PIN6)
  499. void DHT11_OUT(void)
  500. {
  501.   GPIOB->CRL &=~ (0xf<<24);
  502.         GPIOB->CRL |=  (3<<24);//通用推挽输出模式 50M
  503. }
  504.  
  505. // 输入模式
  506. void DHT11_IN(void)
  507. {
  508.         GPIOB->CRL &=~ (0xf<<24);
  509.         GPIOB->CRL |=  (4<<24);//配置浮空输入(外接上拉电阻)
  510. }
  511.  
  512. //DHT11初始化
  513. void DHT11_Init(void)
  514. {
  515.         RCC->APB2ENR |= (1<<3); // 开启PB端口时钟
  516.         DHT11_IN( );// DHT11 的DATA 引脚处于输入状态,时刻检测外部信号
  517.         Delay32M_ms(500);
  518.         Delay32M_ms(500);//DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令
  519. }
  520. #else
  521. // DTH11  ---> PB6
  522. // 输出模式
  523. void DHT11_OUT(void)
  524. {
  525.     GPIO_MODE_Init(GPIOB,PIN6,GPIO_MODE_OUTPUT); //GPIO 模式
  526.     GPIO_PULL_Init(GPIOB,PIN6,GPIO_PULLUP); //GPIO 上拉//PB6
  527. }
  528.  
  529. // 输入模式
  530. void DHT11_IN(void)
  531. {
  532.     GPIO_MODE_Init(GPIOB,PIN6,GPIO_MODE_INPUT); //GPIO 模式
  533.     GPIO_PULL_Init(GPIOB,PIN6,GPIO_PULLUP); //GPIO
  534.  
  535. }
  536.  
  537. //DHT11初始化
  538. void DHT11_Init(void)
  539. {
  540.     DHT11_OUT( );// DHT11 的DATA 引脚处于输出状态
  541.     Delay32M_ms(500);
  542.     Delay32M_ms(500);//DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令
  543. }
  544. #endif
  545. //起始信号
  546. void DHT11_Start(void)
  547. {
  548.         DHT11_SEND_DATA(0);
  549.         Delay32M_ms(20);
  550.         DHT11_SEND_DATA(1);
  551.         Delay32M_us(35);//释放总线
  552. }
  553.  
  554. //应答信号
  555. //返回值 0--无应答  1--有应答
  556. uint8_t DHT11_Ack(void)
  557. {
  558.     uint8_t count=20;
  559.     while(count-->0)
  560.     {
  561.           if(DHT11_REV_DATA!=0)
  562.         {
  563.                Delay16M_us(2);
  564.                continue;
  565.         }
  566.         while(DHT11_REV_DATA==0);//等待80us低电平应答结束
  567.  
  568.         while(DHT11_REV_DATA==1);//等待80us高电平应答结束
  569.  
  570.         return 1;
  571.     }
  572.     return 0;
  573.  
  574. }
  575.  
  576. //读取一个字节数据
  577. uint8_t DHT11_Read_Byte(void)
  578. {
  579.         uint8_t data=0;
  580.         uint8_t i;
  581.         //接受数据,每个数据以50us低电平开始
  582.         for(i=0;i<8;i++)
  583.         {
  584.                 data <<= 1;
  585.                 while(!DHT11_REV_DATA);//等待发送数据的时序变为高电平
  586.                 Delay32M_us(40);//23~27u为数据0,68~74us为u数据1
  587.                 if(DHT11_REV_DATA==1)
  588.                 {
  589.                         data |=1;//数据1
  590.                         while(DHT11_REV_DATA);//等待高电平应答结束
  591.                 }
  592.         }
  593.         return data;
  594. }
  595.  
  596. //读取温湿度
  597. int DHT11_Read_Data()
  598. {
  599.         uint8_t check;
  600.         uint8_t Humi_H,Humi_L,Temp_H,Temp_L;
  601.         DHT11_OUT( );
  602.         DHT11_Start( );
  603.         DHT11_IN( );//切换为输入
  604.         if( DHT11_Ack( )==0 )
  605.         {
  606.                 return -1;
  607.         }
  608.  
  609.         //读取数据
  610.         Temp_H=DHT11_Read_Byte( );
  611.         Temp_L=DHT11_Read_Byte( );
  612.         Humi_H=DHT11_Read_Byte( );
  613.         Humi_L=DHT11_Read_Byte( );
  614.         check=DHT11_Read_Byte( );
  615.  
  616. //        ee_printf("rn%02xrn",Temp_H);
  617. //        ee_printf("%02xrn",Temp_L);
  618. //        ee_printf("%02xrn",Humi_H);
  619. //        ee_printf("%02xrn",Humi_L);
  620.         //结束读取
  621.         Delay32M_ms(50);
  622.         DHT11_OUT( );//切换为输出
  623.         DHT11_SEND_DATA(1);//释放总线
  624.  
  625.         //校验数据
  626.         if(check !=(Temp_H+Temp_L+Humi_H+Humi_L) )
  627.         {
  628.                 return -2;
  629.         }
  630.         Tempture=(Temp_H&0xFF)<<8+Temp_L;
  631.         Humi=(Humi_H&0xFF)<<8+Humi_L;
  632.         return 0;
  633. }
  634.  
  635.  
  636. uint8_t ReceiveBuff[RECV_LEN];
  637. int main(void)
  638. {
  639.  
  640.     uint16_t rlen=0;
  641.     uart_dev.rxlen=0;
  642.     ///----System Init ---------------------------------------------------------------------------------------------
  643.     CLIC_Init();//系统中断配置
  644.     System_Clock_Init();//系统时钟初始化
  645.     DHT11_Init();
  646.     ///----Chapter 3 LowPower Test Init ---------------------------------------------------------------------------------
  647.     //低功耗测功耗需要IO不能悬空
  648.     //Delay32M_ms(5000);
  649.     //LowPower_Config_case1();//所有IO设置为输入,下拉
  650.     //LowPower_Config_case2();//所有IO设置为输入,上拉
  651.  
  652.     //使用外部中断唤醒
  653.     //GPIO_EXIT_Init_case1(GPIOA, PIN2);//检测高电平
  654.     //Interrupt_Level(EXIT2_int_ID, INT_LEVEL0);//CLIC设置中断抢占级别
  655.     //Interrupt_Enable(EXIT2_int_ID);//CLIC使能EXIT中断
  656.     //SYS_Interrupt_Enable();//CLIC开总中断
  657.  
  658.     //配置不同低功耗模式
  659.     //System_Halt();//待机模式 halt1
  660.     //System_Sleep();//睡眠模式 halt2
  661.     //System_Powerdown();//掉电模式 powerdown1
  662.     //System_DeepPwd();//掉电模式 powerdown2
  663.  
  664.     ///----Chapter 5 GPIO Test Init ---------------------------------------------------------------------------------
  665.     GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT); //GPIO 模式
  666.     GPIO_MODE_Init(GPIOA,PIN10,GPIO_MODE_OUTPUT); //GPIO 模式
  667.     GPIO_MODE_Init(GPIOA,PIN12,GPIO_MODE_OUTPUT); //GPIO 模式
  668.     //GPIO_MODE_Init(GPIOA,PIN14,GPIO_MODE_OUTPUT); //GPIO 模式
  669.     //GPIO_MODE_Init(GPIOA,PIN15,GPIO_MODE_OUTPUT); //GPIO 模式
  670.  
  671.     //GPIO_Write(GPIOA,PIN8,GPIO_SET); //GPIO 输出
  672.     //GPIO_Write(GPIOA,PIN10,GPIO_SET); //GPIO 输出
  673.     //GPIO_Write(GPIOA,PIN12,GPIO_SET); //GPIO 输出
  674.     //GPIO_Write(GPIOA,PIN14,GPIO_RESET); //GPIO 输出
  675.     //GPIO_Write(GPIOA,PIN15,GPIO_RESET); //GPIO 输出
  676.  
  677.     //GPIO_Toggle(GPIOA,PIN15); //GPIO 翻转
  678.     //GPIO_MODE_Init(GPIOA,PIN15,GPIO_MODE_INTPUT); //GPIO 模式
  679.     for(uint8_t i=0;i<10;i++)
  680.     {
  681.         GPIO_Toggle(GPIOA,PIN8); //GPIO 翻转
  682.         Delay32M_ms(100);
  683.     }
  684.  
  685.     ///---- Chapter 6 EXIT Test Init -------------------------------------------------------------------------------------
  686.     //GPIO_EXIT_Init_case1(GPIOA, PIN2);//检测高电平
  687.     //GPIO_EXIT_Init_case2(GPIOA, PIN2);//检测低电平
  688.     //GPIO_EXIT_Init_case3(GPIOA, PIN2);//检测上升沿
  689.     //GPIO_EXIT_Init_case4(GPIOA, PIN2);//检测下降沿
  690.  
  691.     //Interrupt_Level(EXIT2_int_ID, INT_LEVEL0);//CLIC设置中断抢占级别
  692.     //Interrupt_Enable(EXIT2_int_ID);//CLIC使能EXIT中断
  693.  
  694.     //载波检测中断
  695.     //CAW_Init();//载波检测
  696.     //Interrupt_Enable(CAW_int_ID);//CLIC使能中断
  697.  
  698.     //SYS_Interrupt_Enable();//CLIC开总中断
  699.  
  700.     ///---- Chapter 7 RTC Test Init --------------------------------------------------------------------------------------
  701.     //RTC_Init_case1();
  702.     RTC_Init_case2();
  703.  
  704.     Interrupt_Level(MTIMER_int_ID, INT_LEVEL2 );//CLIC设置中断抢占级别
  705.     Interrupt_Enable(MTIMER_int_ID);//CLIC使能中断
  706.     SYS_Interrupt_Enable();//CLIC开总中断
  707.  
  708.     ///---- Chapter 8 IWDG Test Init -------------------------------------------------------------------------------------
  709.     //IWDG_Init(9000); //配置看门狗计数值(时钟频率3K)
  710.     //Delay32M_ms(1000);
  711.     //IWDG_Start(); //启动看门狗
  712.     //IWDG_Refresh(); //喂狗
  713.  
  714.     ///---- Chapter 9 Timer Test Init ------------------------------------------------------------------------------------
  715.     //GPIO_MODE_Init(GPIOB,PIN11,GPIO_MODE_OUTPUT); //GPIO 模式
  716.     //GPIO_MODE_Init(GPIOA,PIN9,GPIO_MODE_OUTPUT);
  717.     //GPIO_MODE_Init(GPIOA,PIN11,GPIO_MODE_OUTPUT);
  718.     //GPIO_MODE_Init(GPIOA,PIN13,GPIO_MODE_OUTPUT);
  719.  
  720.     //外设配置
  721.     //Timer1_UpCounting_Mode_Init();//向上计数
  722.         //Timer1_6StepPWM_Mode_Init();//6stepPWM输出
  723.     //Timer2_UpCounting_Mode_Init();//向上计数
  724.     //Timer2_DownCounting_Mode_Init();//向下计数
  725.     //Timer2_ExternalClock_Mode_Init();//外部时钟
  726.     //Timer2_InputCapture_Mode_Init();//输入捕获
  727.     //Timer2_PWM_InputCapture_Mode_Init();//PWM输入捕获
  728.     //Timer2_Input_XOR_Mode_Init();//输入异或
  729.     //Timer2_PWM_Mode_Init();//PWM输出
  730.     //Timer2_6StepPWM_Mode_Init();//6stepPWM输出
  731.  
  732.     //设置中断优先级
  733.     //Interrupt_Level(TIMER1_updata_int_ID, INT_LEVEL1);//CLIC设置中断抢占级别
  734.  
  735.     //使能外设中断
  736.     //Interrupt_Enable(TIMER1_break_int_ID);//CLIC使能中断
  737.     //Interrupt_Enable(TIMER1_updata_int_ID);//CLIC使能中断
  738.     //Interrupt_Enable(TIMER1_capture_compare_int_ID);//CLIC使能中断
  739.     //Interrupt_Enable(TIMER1_trigger_comm_int_ID);//CLIC使能中断
  740.  
  741.     //Interrupt_Enable(TIMER2_break_int_ID);//CLIC使能中断
  742.     //Interrupt_Enable(TIMER2_updata_int_ID);//CLIC使能中断
  743.     //Interrupt_Enable(TIMER2_capture_compare_int_ID);//CLIC使能中断
  744.     //Interrupt_Enable(TIMER2_trigger_comm_int_ID);//CLIC使能中断
  745.  
  746.     //使能系统总中断
  747.     //SYS_Interrupt_Enable();//CLIC开总中断
  748.  
  749.     ///---- Chapter 10 WUP Test Init -------------------------------------------------------------------------------------
  750.     //GPIO_MODE_Init(GPIOA,PIN2,GPIO_MODE_OUTPUT);
  751.     //GPIO_MODE_Init(GPIOA,PIN3,GPIO_MODE_OUTPUT);
  752.  
  753.     //WUP_Init_case1(9000);//设置中断周期,使能WUP中断
  754.     //Interrupt_Enable(WUP_int_ID);//CLIC使能中断
  755.     //SYS_Interrupt_Enable();//CLIC开总中断
  756.  
  757.     //配置不同低功耗模式
  758.     //System_Halt();//待机模式 halt1
  759.     //System_Sleep();//睡眠模式 halt2
  760.     //System_Powerdown();//掉电模式 powerdown1
  761.     //System_DeepPwd();//掉电模式 powerdown2
  762.  
  763.     ///---- Chapter 11 ADC Test Init -------------------------------------------------------------------------------------
  764.  
  765.     uint32_t adc_result;
  766.     uint32_t adc_pack[16];
  767.     uint32_t adc_sum;
  768.     uint32_t adc_count;
  769.     uint32_t adc_avr;
  770.     uint32_t voltage_avr;
  771.  
  772.     ADC_Init_case1();//内部基准,测PA4
  773.     //ADC_Init_case2();//外部基准,测PA4
  774.  
  775.     ///---- Chapter 12 I2C Test Init -------------------------------------------------------------------------------------
  776.     uint8_t i2c_data;
  777.     I2C_Init_case1();//非中断模式
  778.     //I2C_Init_case2();//ready中断模式
  779.     //I2C_Init_case3();//error中断模式
  780.     //I2C_Init_case4();//ready & error中断模式
  781.  
  782.     //Interrupt_Enable(I2C_ready_int_ID);//CLIC使能i2c_ready中断
  783.     //Interrupt_Enable(I2C_error_int_ID);//CLIC使能i2c_error中断
  784.     //SYS_Interrupt_Enable();//CLIC开总中断
  785.     OLED_Init();
  786.     ///---- Chapter 13 SPI1 Test Init ------------------------------------------------------------------------------------
  787.     //uint8_t sTxpack[10] = {0,1,2,3,4,5,6,7,8,9};
  788.     //uint8_t sRxpack[10] = {0,1,2,3,4,5,6,7,8,9};
  789.     //uint8_t REG_Data;
  790.  
  791.     //SPI1 Init Test
  792.     //SPI_Init_case1(SPI1);//非中断模式
  793.     //SPI1_CSN_Init_case1();//CFG: CE-GPIO7,CSN-GPIO8
  794.     //SPI_Init_case2(SPI1);//中断模式
  795.     //Interrupt_Enable(SPI1_int_ID);//CLIC使能单个中断
  796.  
  797.     //SPI2 Init Test
  798.     //SPI_Init_case1(SPI2);//非中断模式
  799.     //SPI2_CSN_Init_case1();//CFG: CE-GPIO7,CSN-GPIO8
  800.     //SPI_Init_case2(SPI2);//中断模式
  801.     //Interrupt_Enable(SPI2_int_ID);//CLIC使能单个中断
  802.  
  803.  
  804.     ///---- Chapter 15 UART Test Init -------------------------------------------------------------------------------
  805.     //uint8_t upack1[20] = {0,1,2,3,4,5,6,7,8,9};
  806.     //uint8_t upack2[20] = {0,1,2,3,4,5,6,7,8,9};
  807.     //uint8_t upack3[20] = {0,1,2,3,4,5,6,7,8,9};
  808.     //uint8_t upack4[20] = {10,1,2,3,4,5,6,7,8,9};
  809.  
  810.     //UART_Init_case1(UART2);//非中断模式
  811.     //UART_Init_case1(UART3);//非中断模式
  812.     //UART_Init_case1(UART4);//非中断模式
  813.  
  814.     UART_Init_IT_case1(UART1);//中断模式
  815.     //UART_Init_IT_case1(UART4);//中断模式
  816.     Interrupt_Enable(UART1_int_ID);//CLIC使能单个中断
  817.     UART1->CTRL |= 0x00000001U;  //清除中断标志位,防止开机先进一次中断
  818.     //Interrupt_Enable(UART4_int_ID);//CLIC使能单个中断
  819.  
  820.     SYS_Interrupt_Enable();//CLIC开总中断
  821.     //printf("uart init:rn");
  822.  
  823.     ///---- Chapter 16 LV Test Init --------------------------------------------------------------------------------------
  824.     //LV_Init_case1(12);//设置低压报警阈值
  825.     //LV_Interrupt_Enable();//使能低压报警中断
  826.     //Interrupt_Enable(LV_int_ID);//CLIC使能单个中断
  827.     //SYS_Interrupt_Enable();//CLIC开总中断
  828.  
  829.     ///---- Chapter 17 RANDGEN Test Init ---------------------------------------------------------------------------------
  830.     //uint32_t rand_data;
  831.  
  832.     ///---- Chapter 18 compare Test Init ---------------------------------------------------------------------------------
  833.     //COPM1_Init();//COPM1
  834.     //Interrupt_Enable(COMP1_int_ID);//CLIC使能单个中断
  835.     //COPM2_Init();//COPM2
  836.     //Interrupt_Enable(COMP2_int_ID);//CLIC使能单个中断
  837.     //COPM3_Init();//COPM3
  838.     //Interrupt_Enable(COMP3_int_ID);//CLIC使能单个中断
  839.     //SYS_Interrupt_Enable();//CLIC开总中断
  840.  
  841.     ///---- Chapter 22 flash Test Init ----------------------------------------------------------------------------------
  842.     //NVR_RW_Test();//NVR read and write test
  843.     //Flash_RW_Test();
  844.  
  845.     ///---- 系统总中断控制 -------------------------------------------------------------------------------------------------
  846.     //SYS_Interrupt_Enable();//CLIC开总中断
  847.     //SYS_Interrupt_Disable();//CLIC关总中断
  848.     adc_pack[0]=read_csr(mcycle);
  849.     adc_pack[1]=read_csr(mcycle);
  850.     ee_printf("nHello CSM32RV20:n");
  851.     ee_printf("mcycle:%d n",read_csr(mcycle));//比如mcycle这一CSR用于处理器运行的时钟周期计数
  852.     ee_printf("read_csr(mcycle):%d n",adc_pack[1]-adc_pack[0]);//比如mcycle这一CSR用于处理器运行的时钟周期计数
  853.     ee_printf("CMU->OSC_SR:%x n",CMU->OSC_SR );
  854.     if(CMU->OSC_SR==210 ) ee_printf("CMU->OSC_SR:210,OSC 时钟已稳定,RCOSC 时钟已稳定,:OSC 在为 MCU 提供时钟;OSC 在为外设提供时钟;   n" );
  855.     //printf("Hello CSM32RV20:rn");
  856.  
  857.     ee_printf("请输入:on 或者off (开灯/关灯)rn");
  858.     uint32_t rt_tick1 = rt_tick_get();
  859.     uint32_t rt_tick2 = rt_tick_get();
  860.     OLED_Clear();
  861.     Delay32M_ms(1000);
  862. //   OLED_Light();
  863. //    OLED_DrawBMP(0,0,128,8,BAD_APPLE);
  864.     OLED_ShowString(0,0,"CSM32 TEST",16);
  865.         while(1)
  866.         {
  867.             mp_receive_data(ReceiveBuff, &rlen);
  868.         if(uart_dev.frameok==1)  //如果接收到数据
  869.         {
  870.             ee_printf("收到数据:");
  871.             OLED_ShowString(0,2,"in:",16);
  872.             Uart_Send(UART1,(uint8_t *)ReceiveBuff,rlen);
  873.             OLED_ShowString(28,2,(uint8_t *)ReceiveBuff,16);
  874.             ee_printf("rn");
  875.             uint8_t aton= (uint8_t)ReceiveBuff[0];
  876.                                 uint32_t data=0;
  877.             switch (aton) {
  878.                 case 111://"o"
  879.                      if(1==rlen) break;
  880.                      if(ReceiveBuff[1]=='n')
  881.                     {
  882.                         GPIO_Write(GPIOA,PIN8,GPIO_RESET);
  883.                         ee_printf("灯开了!rn");
  884.                     }
  885.                     else if((ReceiveBuff[1]=='f')&&(ReceiveBuff[2]=='f'))
  886.                     {
  887.                         GPIO_Write(GPIOA,PIN8,GPIO_SET);
  888.                         ee_printf("关灯了!rn");
  889.                     }
  890.                     else
  891.                     {
  892.                         ee_printf("请输入:on 或者off (开灯/关灯)rn");
  893.                     }
  894.                     break;
  895.  
  896.                 case 48://"0"
  897.                     ee_printf("nRTC_MTIME->mtimelo:%u n",_REG32(RTC_MTIME,0));
  898.                     ee_printf("nRTC_MTIME->mtimehi:%u n",_REG32(0x0200bff8UL,4));
  899. //                     uint64_t mtime1=RTC_MTIME->mtime;
  900. //                     ee_printf("nRTC_MTIME->mtime-all:%lu n",mtime1);
  901.                     break;
  902.                 case 49://"1"
  903.  
  904.  
  905.                                 data=DHT11_Read_Data();
  906.                                 if(data==0)
  907.                                 {
  908.                                     OLED_ShowString(0,2,"T:",16);
  909.                                     OLED_ShowNumber(20,2,Tempture/1000,2);
  910.                                     OLED_ShowString(36,2,".",16);
  911.                                     OLED_ShowNumber(46,2,Tempture%1000,3);
  912.                                     OLED_ShowString(0,4,"H:",16);
  913.                                     OLED_ShowNumber(20,4,Humi/1000,2);
  914.                                     OLED_ShowString(36,4,".",16);
  915.                                     OLED_ShowNumber(40,4,Humi%1000,3);
  916.                                 }
  917.             ee_printf("Tempture:%u.%u   Humi:%u.%un",Tempture/1000 ,Tempture%1000,Humi/1000,Humi%1000);
  918.             adc_pack[0]=read_csr(mcycle);
  919.             adc_pack[1]=read_csr(mcycle);
  920.             ee_printf("read_csr(mcycle):%d n",adc_pack[1]-adc_pack[0]);//比如mcycle这一CSR用于处理器运行的时钟周期计数
  921.             ee_printf("mcycle:%d n",read_csr(mcycle));//比如mcycle这一CSR用于处理器运行的时钟周期计数
  922.             Delay32M_ms(2000);
  923.                                 data=DHT11_Read_Data();
  924.                                 if(data==0)
  925.                                 {
  926.                                     OLED_ShowString(0,2,"T:",16);
  927.                                     OLED_ShowNumber(20,2,Tempture/1000,2);
  928.                                     OLED_ShowString(36,2,".",16);
  929.                                     OLED_ShowNumber(46,2,Tempture%1000,3);
  930.                                     OLED_ShowString(0,4,"H:",16);
  931.                                     OLED_ShowNumber(20,4,Humi/1000,2);
  932.                                     OLED_ShowString(36,4,".",16);
  933.                                     OLED_ShowNumber(40,4,Humi%1000,3);
  934.                                 }
  935.             ee_printf("Tempture:%u.%u   Humi:%u.%un",Tempture/1000 ,Tempture%1000,Humi/1000,Humi%1000);
  936.  
  937. //            ee_printf("type?RTC_MTIME->mtime:%lu n",type(RTC_MTIME->mtime));
  938.  
  939.  
  940.                     break;//
  941.              case 50://"2"
  942.                 ADC->SEL = 0; //测量通道选择:0-PTAT,1-1/2VDD,2-PAD3,3-PAD4,4-PAD5,5-PAD6,6-PAD7,7-PAD8,8-PAD9,9-PAD10,10-NTC,11-VDD,其它-无
  943.                 Delay32M_us(20);//ADC电源开启需要时间
  944.  
  945.  
  946.             //
  947.  
  948.  
  949.                 for(uint8_t i=0;i<16;i++)
  950.                 {
  951.                 adc_result = ADC_Conversion();//适用于非中断模式            adc_sum += adc_pack[i];
  952.                 printf("adc_val:%urn",adc_result);
  953.                 ee_printf("  %d.%dmV rn",(adc_result*4*12000/32768)/10,(adc_result*4*12000/32768)%10);
  954.                 Delay32M_ms(20);        }
  955.  
  956.  
  957.  
  958.                 ADC->SEL = 3; //测量通道选择:0-PTAT,1-1/2VDD,2-PAD3,3-PAD4,4-PAD5,5-PAD6,6-PAD7,7-PAD8,8-PAD9,9-PAD10,10-NTC,11-VDD,其它-无
  959.                 Delay32M_us(20);//ADC电源开启需要时间
  960.                 GPIO_MODE_Init(GPIOA,PIN4,GPIO_MODE_ANALOG);//设置GPIO为ADC输入
  961.  
  962.                     break;
  963. //                                    case 49 ... 57://"1~9"
  964. //                    timeProducing[9]=rt_tick_get();
  965. //                    timeProducing[6]=timeProducing[6]*10+a;
  966. //                    timeProducing[7]++;
  967. //                    if ( timeProducing[7]==2) {
  968. //                        date[1]=timeProducing[6];
  969. //                                       timeProducing[9]=rt_tick_get();
  970. //                                       timeProducing[8]++;
  971. //                                       timeProducing[7]=0;
  972. //
  973. //                                       rt_kprintf("pleases input month :");
  974. //
  975. //                    }
  976. //
  977. //                    break;
  978. //
  979. //
  980. //                case 21:
  981. //                    timeProducing[9]=rt_tick_get();
  982. //                    timeProducing[6]=timeProducing[6]*10+date_a;
  983. //                    timeProducing[7]++;
  984. //                    if ( timeProducing[7]==4) {
  985. //                       date[0]=timeProducing[6];
  986. //                                       timeProducing[9]=rt_tick_get();
  987. //                                       timeProducing[8]=11;
  988. //                                       timeProducing[7]=0;
  989. //
  990. //                                       rt_kprintf("year is %d,pleases input month :",date[0]);
  991. //
  992. //                    }
  993. //
  994. //                    break;
  995.  
  996.                 default:
  997.                     break;
  998.             }
  999.  
  1000.  
  1001.  
  1002.  
  1003. //            if((ReceiveBuff[0]=='o')&&(ReceiveBuff[1]=='n'))
  1004. //            {
  1005. //                GPIO_Write(GPIOA,PIN8,GPIO_RESET);
  1006. //                ee_printf("灯开了!rn");
  1007. //            }
  1008. //            else if((ReceiveBuff[0]=='o')&&(ReceiveBuff[1]=='f')&&(ReceiveBuff[2]=='f'))
  1009. //            {
  1010. //                GPIO_Write(GPIOA,PIN8,GPIO_SET);
  1011. //                ee_printf("关灯了!rn");
  1012. //            }
  1013. //            else
  1014. //            {
  1015. //                ee_printf("请输入:on 或者off (开灯/关灯)rn");
  1016. //            }
  1017.  
  1018.            uart_dev.frameok=0;
  1019.            uart_dev.rxlen=0;
  1020.         }
  1021.         if( rt_tick_get()%1000==0) ee_printf("time is %u s n",rt_tick_get()/1000);
  1022.         if(!( rt_tick_get()- rt_tick1< 10000)){
  1023.                 rt_tick1 = rt_tick_get() ;
  1024.              GPIO_Toggle(GPIOB,PIN8);
  1025.             GPIO_Toggle(GPIOA,PIN10); //GPIO 翻转
  1026. //            ee_printf("mcycle:%u n",read_csr(mcycle));
  1027.             ee_printf("rt_tick_get:%u n", rt_tick_get());
  1028.             ee_printf("RTC_MTIME->mtime:%lu         ",RTC_MTIME->mtime);
  1029. //            ee_printf("type?RTC_MTIME->mtime:%lu n",type(RTC_MTIME->mtime));
  1030.             ee_printf("RTC_MTIME->mtime0-7B:");
  1031.                for (uint8_t i = 0; i < 8; i++)
  1032.                 {
  1033.                        ee_printf("%x    ",_REG8(0x0200bff8UL,i));
  1034.                 }
  1035.  
  1036.             ee_printf("nRTC_MTIME->mtime:%u n",_REG32(0x0200bff8UL,4));
  1037.  
  1038.             ee_printf("RTC_MTIMECMP->mtimecmp:%lu n",RTC_MTIMECMP->mtimecmp);
  1039. //            ee_printf("type?RTC_MTIME->mtime:%lu n",type(RTC_MTIMECMP->mtimecmp));
  1040.             ee_printf("->?RTC_MTIME->mtime:%p n",RTC_MTIMECMP->mtimecmp);
  1041.             ee_printf("RTC_MTIMECMP->mtimecmp0-7B:");
  1042.                for (uint8_t i = 0; i < 8; i++)
  1043.                 {
  1044.                        ee_printf("%x    ",_REG8(0x02004000UL,i));
  1045.                 }
  1046.  
  1047.             ee_printf(" n");
  1048.         }
  1049. //        Delay32M_ms(500);
  1050.         //Delay16M_ms(500);
  1051.         //Delay16M_us(500000);
  1052.         //GPIO_Toggle(GPIOA,PIN15);
  1053.  
  1054.         //printf("main:rn");
  1055.  
  1056.         ///---- Chapter 6 EXIT test ---------------------------------------------------------------------------------
  1057.         //delay16M_ms(500);
  1058.         //GPIO_Toggle(GPIOA,PIN15);
  1059.  
  1060.  
  1061.         ///---- Chapter 8 IWDG test ---------------------------------------------------------------------------------
  1062.         //IWDG_Refresh();
  1063.         //delay16M_ms(500);
  1064.         //GPIO_Toggle(GPIOA,PIN15);
  1065.  
  1066.         ///---- Chapter 9 Timer test --------------------------------------------------------------------------------
  1067.         //---- soft break --------------------------------------------------------------------------------------
  1068.         //delay16M_ms(100);
  1069.         //TIMER2->BDTR |= 1 <<15;//BDTR[15]-MOE-主输出使能:0-关闭,1-使能
  1070.         //delay16M_ms(100);
  1071.         //TIMER2->EGR |= 1 <<7;//EGR[7]-BG-产生刹车事件
  1072.         //---- soft COM ----------------------------------------------------------------------------------------
  1073.         //delay16M_ms(100);
  1074.         //TIMER2->EGR = 1 <<5;//EGR[5]-COMG-捕获/比较事件,产生控制更新
  1075.         //---- generate oxr ------------------------------------------------------------------------------------
  1076.         /*
  1077.         Delay16M_ms(10);//1
  1078.         GPIO_Write(GPIOA,PIN9,GPIO_SET);
  1079.         GPIO_Write(GPIOA,PIN11,GPIO_RESET);
  1080.         GPIO_Write(GPIOA,PIN13,GPIO_SET);
  1081.         Delay16M_ms(10);//2
  1082.         GPIO_Write(GPIOA,PIN9,GPIO_SET);
  1083.         GPIO_Write(GPIOA,PIN11,GPIO_RESET);
  1084.         GPIO_Write(GPIOA,PIN13,GPIO_RESET);
  1085.         Delay16M_ms(10);//3
  1086.         GPIO_Write(GPIOA,PIN9,GPIO_SET);
  1087.         GPIO_Write(GPIOA,PIN11,GPIO_SET);
  1088.         GPIO_Write(GPIOA,PIN13,GPIO_RESET);
  1089.         Delay16M_ms(10);//4
  1090.         GPIO_Write(GPIOA,PIN9,GPIO_RESET);
  1091.         GPIO_Write(GPIOA,PIN11,GPIO_SET);
  1092.         GPIO_Write(GPIOA,PIN13,GPIO_RESET);
  1093.         Delay16M_ms(10);//5
  1094.         GPIO_Write(GPIOA,PIN9,GPIO_RESET);
  1095.         GPIO_Write(GPIOA,PIN11,GPIO_SET);
  1096.         GPIO_Write(GPIOA,PIN13,GPIO_SET);
  1097.         Delay16M_ms(10);//6
  1098.         GPIO_Write(GPIOA,PIN9,GPIO_RESET);
  1099.         GPIO_Write(GPIOA,PIN11,GPIO_RESET);
  1100.         GPIO_Write(GPIOA,PIN13,GPIO_SET);
  1101.         */
  1102.  
  1103.         ///---- Chapter 11 ADC test ---------------------------------------------------------------------------------
  1104.        if(!( rt_tick_get()- rt_tick2< 15000)){
  1105.             rt_tick2 = rt_tick_get();
  1106.         adc_result = ADC_Conversion();//适用于非中断模式
  1107.             //printf("adc_val:%drn",adc_result);
  1108.             adc_pack[(adc_count++)&0xf] = adc_result;
  1109.             adc_sum=0;
  1110.         for(uint8_t i=0;i<16;i++)
  1111.         {
  1112.             adc_sum += adc_pack[i];
  1113.         }
  1114.         adc_avr = adc_sum/16;
  1115.         ee_printf("val:%d  avr:%d %d.%dmV   %d.%dmVrn",adc_result,adc_avr,(adc_result*4*12000/32768)/10,(adc_result*4*12000/32768)%10,(adc_avr*4*12000/32768)/10,(adc_avr*4*12000/32768)%10);
  1116.             //ADC_Soft_Start();//软件触发ADC,适用于中断模式
  1117.         OLED_ShowString(0,4,"adc:",16);
  1118.         OLED_ShowNumber(40,4,(adc_avr*4*12000/32768)/10,2);
  1119.         OLED_ShowString(76,4,".",16);
  1120.         OLED_ShowNumber(80,4,(adc_avr*4*12000/32768)%10,3);
  1121.  
  1122.  
  1123.  
  1124.         adc_result =rt_tick_get()/1000;
  1125.         adc_sum=adc_result /60;
  1126.         adc_avr = adc_sum/60;
  1127.         ee_printf("time:%d day %d hour' %d:%dn",adc_avr/24,adc_avr%24,adc_sum%60,adc_result %60);
  1128.         OLED_ShowString(0,6,"time:",16);
  1129.         OLED_ShowNumber(40,6,adc_avr/24,2);
  1130.         OLED_ShowString(56,6,"d",16);
  1131.         OLED_ShowNumber(64,6,adc_avr%24,2);
  1132.         OLED_ShowString(80,6,":",16);
  1133.         OLED_ShowNumber(88,6,adc_sum%60,2);
  1134.         OLED_ShowString(104,6,":",16);
  1135.         OLED_ShowNumber(112,6,adc_result %60,2);
  1136.        }
  1137.         ///---- Chapter 12 I2C test ---------------------------------------------------------------------------------
  1138.         //I2C_Write(0x2d,0x55);//适用于非中断模式
  1139.         //i2c_data = I2C_Read(0x2d);//适用于非中断模式
  1140.         //printf("data:%xrn",i2c_data);
  1141.         //I2C_Write(0x2d,0xaa);//适用于非中断模式
  1142.         //i2c_data = I2C_Read(0x2d);//适用于非中断模式
  1143.         //printf("data:%xrn",i2c_data);
  1144.         //I2C_Write_IT(0x2d,0x55);//适用于中断模式
  1145.  
  1146.         ///---- Chapter 13 SPI test --------------------------------------------------------------------------------
  1147.         //SPI1 Test
  1148.         //SPI_Transceive(SPI1,sTxpack,sRxpack,10);//非中断模式
  1149.         //SPI1_RW_reg(WRITE_REG+0x05,0x53);//读写Si24R1寄存器
  1150.         //REG_Data = SPI1_RW_reg(READ_REG+0x05,0);//读写Si24R1寄存器
  1151.         //printf("rnREG5:%02x",REG_Data);
  1152.         //delay16M_ms(500);
  1153.  
  1154.         //SPI2 Test
  1155.         //SPI_Transceive(SPI2,sTxpack,sRxpack,10);//非中断模式
  1156.         //SPI2_RW_reg(WRITE_REG+0x05,0x53);//读写Si24R1寄存器
  1157.         //REG_Data = SPI2_RW_reg(READ_REG+0x05,0);//读写Si24R1寄存器
  1158.         //printf("rnREG5:%02x",REG_Data);
  1159.         //delay16M_ms(500);
  1160.  
  1161.         ///---- Chapter 15 UART Test ------------------------------------------------------------------------------------
  1162.         //---- 非中断模式数据回环测试 -------------------------------------------------------------------------------------
  1163.         //Uart_Reveive(UART1,upack1,10);//适用于非中断发送模式
  1164.         //Uart_Send(UART1,upack1,10);//适用于非中断发送模式
  1165.         //Uart_Reveive(UART2,upack2,10);//适用于非中断发送模式
  1166.         //Uart_Send(UART2,upack2,10);//适用于非中断发送模式
  1167.         //Uart_Reveive(UART3,upack3,10);//适用于非中断发送模式
  1168.         //Uart_Send(UART3,upack3,10);//适用于非中断发送模式
  1169.         //Uart_Reveive(UART4,upack4,10);//适用于非中断发送模式
  1170.         //Uart_Send(UART4,upack4,10);//适用于非中断发送模式
  1171.  
  1172.         //---- 中断模式数据回环测试 --------------------------------------------------------------------------------------
  1173.         //UART1_putbuf(UART1_getbuf());
  1174.  
  1175.         //---- printf测试 ----------------------------------------------------------------------------------------
  1176.         //printf("Hellow-01234568789abcdefghijklmnopqrstuvwxyzrn");
  1177.  
  1178.  
  1179.         ///---- Chapter 17 RANDGEN test -----------------------------------------------------------------------------
  1180.         //rand_data = RAND_Get();//生成随机数
  1181.         //printf("rand:0x%08x,%urn",rand_data,rand_data);
  1182.         //delay16M_ms(500);
  1183.  
  1184.  
  1185.         ///---- Chapter 18 COMPARE test -----------------------------------------------------------------------------
  1186.         //if(COMP1->irq&0x1)
  1187.         //{
  1188.             //GPIO_Toggle(GPIOA,PIN15);
  1189.             //COMP1->irq = 1;
  1190.         //}
  1191.         //delay16M_ms(10);
  1192.  
  1193.         }
  1194.  
  1195.   return 0;
  1196. }
  1197.  
  1198.  
  1199.  
  1200.  
  1201. //}
  1202.  
复制代码

CSM32RV20

CSM32RV20

com:
rt_tick_get:21537
RTC_MTIME->mtime:68924127         RTC_MTIME->mtime0-7B:99    f5    1b    4    0    0    0    0   
RTC_MTIME->mtime:0
RTC_MTIMECMP->mtimecmp:68960000
->?RTC_MTIME->mtime:041c6480
RTC_MTIMECMP->mtimecmp0-7B:0    a3    1c    4    0    0    0    0     
time is 1478 s
rt_tick_get:1482292
RTC_MTIME->mtime:448375682         RTC_MTIME->mtime0-7B:52    ee    b9    1a    1    0    0    0   
RTC_MTIME->mtime:1
RTC_MTIMECMP->mtimecmp:448411904
->?RTC_MTIME->mtime:1aba5e80
RTC_MTIMECMP->mtimecmp0-7B:0    9d    ba    1a    1    0    0    0     
val:9231  avr:4887 1352.1mV   715.8mV

time:0 day 0 hour' 24:46
收到数据:1

Tempture:0.0   Humi:0.0
read_csr(mcycle):2
mcycle:413283856
Tempture:23.808   Humi:0.0
time is 1492 s
rt_tick_get:1492301
RTC_MTIME->mtime:480404340         RTC_MTIME->mtime0-7B:44    a6    a2    1c    1    0    0    0   
RTC_MTIME->mtime:1
RTC_MTIMECMP->mtimecmp:480440704
->?RTC_MTIME->mtime:1ca31700
RTC_MTIMECMP->mtimecmp0-7B:80    55    a3    1c    1    0    0    0     
收到数据:2

adc_val:5430
  795.4mV

adc_val:5426
  794.8mV

adc_val:5430
  795.4mV

adc_val:5419
  793.7mV

adc_val:5417
  793.5mV

adc_val:5416
  793.3mV

adc_val:5427
  794.9mV

adc_val:5432
  795.7mV

adc_val:5421
  794.0mV

adc_val:5421
  794.0mV

adc_val:5428
  795.1mV

adc_val:5419
  793.7mV

adc_val:5424
  794.5mV

adc_val:5417
  793.5mV

adc_val:5420
  793.9mV

adc_val:5429
  795.2mV

val:9623  avr:51657617 1409.6mV   4179.3mV

time:0 day 0 hour' 25:2
rt_tick_get:1502303
RTC_MTIME->mtime:512409229         RTC_MTIME->mtime0-7B:5d    1    8b    1e    1    0    0    0   
RTC_MTIME->mtime:1
RTC_MTIMECMP->mtimecmp:512443904
->?RTC_MTIME->mtime:1e8b6b80
RTC_MTIMECMP->mtimecmp0-7B:0    b6    8b    1e    1    0    0    0 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分