[开发板与模块] 【ESK32-30519 + ESK32-21001测评】4、人体温度计

[复制链接]
 楼主| sky.sun.zz 发表于 2022-9-17 14:01 | 显示全部楼层 |阅读模式
<
本帖最后由 sky.sun.zz 于 2022-9-17 14:22 编辑

【ESK32-30519 + ESK32-21001测评】4、人体温度计
   
    使用1只现成的额温测量模块,它采用USART串口传输方式与HT32F54253通讯,传送人体体温数据。
c251da3fc166e6a1e7e1f2ffb1e771b5

    官方ESK32-30519原理图中CN4关于HT32F54253的RXD和TXD标注貌似有误:
ERROR.png
   
    额温测量模块以每0.2秒一次的速率发送温度数据到串口,串口参数:
9600波特率
8位数据位
1位停止位
无奇偶校验
    设置HT32F54253以串口接收中断方式接收数据,同时需要移植HT官方LEDC演示代码。修改LEDC源显示代码为实时测量温度数据的显示。

    HT
32F54253的LEDC功能是一个亮点,使用者无需关心LED数码管的底层操作,只要把数据送显示缓冲区就够了。


部分代码
  1. #include "ht32.h"
  2. #include "ht32_board.h"
  3. #include "ht32_board_config.h"
  4. uint8_t DiapBuf[4]={0,0,0,0};

  5. const u8 NumberChar[]={
  6.   /* a: Seg4(0x10), b: Seg7(0x80), c: Seg2(0x04), d: Seg5(0x20),
  7.      e: Seg3(0x08), f: Seg0(0x01), g: Seg6(0x40), dp: Seg1(0x02) */
  8.   0xBD, /* '0' = a+b+c+d+e+f      = 0x10 + 0x80 + 0x04 + 0x20 + 0x08 + 0x01               = 0xBD */
  9.   0x84, /* '1' =   b+c+           =        0x80 + 0x04                                    = 0x84 */
  10.   0xF8, /* '2' = a+b  +d+e  +g    = 0x10 + 0x80 +        0x20 + 0x08 +      + 0x40        = 0xF8 */
  11.   0xF4, /* '3' = a+b+c+d    +g    = 0x10 + 0x80 + 0x04 + 0x20 +             + 0x40        = 0xF4 */
  12.   0xC5, /* '4' =   b+c    +f+g    =        0x80 + 0x04               + 0x01 + 0x40        = 0xC5 */
  13.   0x75, /* '5' = a  +c+d  +f+g    = 0x10        + 0x04 + 0x20        + 0x01 + 0x40        = 0x75 */
  14.   0x7D, /* '6' = a  +c+d+e+f+g    = 0x10        + 0x04 + 0x20 + 0x08 + 0x01 + 0x40        = 0x7D */
  15.   0x95, /* '7' = a+b+c    +f      = 0x10 + 0x80 + 0x04               + 0x01               = 0x95 */
  16.   0xFD, /* '8' = a+b+c+d+e+f+g    = 0x10 + 0x80 + 0x04 + 0x20 + 0x08 + 0x01 + 0x40        = 0xFD */
  17.   0xF5, /* '9' = a+b+c+d  +f+g    = 0x10 + 0x80 + 0x04 + 0x20        + 0x01 + 0x40        = 0xF5 */
  18.   0x02  /* '.' =               dp =  
  19.                                                 0x02 = 0x02 */
  20.         
  21. };

  22. void LEDC_Configuration(void);
  23. void GPIO_Configuration(void);
  24. extern bool gIsUpdateChar;
  25. void UxART_Configuration(void);
  26. void UxART_RxTest(void);

  27. uc8  *gURTx_Ptr;
  28. vu32 gURTx_Length = 0;
  29. u8  *gURRx_Ptr;
  30. vu32 gURRx_Length = 0;
  31. vu32 gIsTxFinished = FALSE;
  32. u8 gRx_Buffer[10];


  33. void LEDC_Disp(void)
  34. {
  35.   LEDC_SetData(HTCFG_LEDC_COM_D1, DiapBuf[0]);
  36.   LEDC_SetData(HTCFG_LEDC_COM_D2, DiapBuf[1]);
  37.   LEDC_SetData(HTCFG_LEDC_COM_D3, DiapBuf[2]);
  38.   LEDC_SetData(HTCFG_LEDC_COM_D4, DiapBuf[3]);
  39. }

  40. int main(void)
  41. {
  42.   HT32F_DVB_LEDInit(HT_LED1);
  43.   HT32F_DVB_LEDInit(HT_LED2);        
  44.   UxART_Configuration();
  45.   GPIO_Configuration();
  46.   LEDC_Configuration();
  47.   gURRx_Ptr = gRx_Buffer;
  48.   while (1)
  49.   {
  50.     UxART_RxTest();

  51. if(gIsUpdateChar)
  52.     {
  53.      LEDC_Disp();
  54.      gIsUpdateChar = FALSE;
  55.     }
  56.                
  57.   }
  58. }

  59. void UxART_Configuration(void)
  60. {
  61.     CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
  62.     CKCUClock.Bit.AFIO                   = 1;
  63.     CKCUClock.Bit.HTCFG_UART_RX_GPIO_CLK = 1;
  64.     CKCUClock.Bit.HTCFG_UART_IPN         = 1;
  65.     CKCU_PeripClockConfig(CKCUClock, ENABLE);
  66.   GPIO_PullResistorConfig(HTCFG_UART_RX_GPIO_PORT, HTCFG_UART_RX_GPIO_PIN, GPIO_PR_UP);
  67.   AFIO_GPxConfig(HTCFG_UART_TX_GPIO_ID, HTCFG_UART_TX_AFIO_PIN,  AFIO_FUN_USART_UART);
  68.   AFIO_GPxConfig(HTCFG_UART_RX_GPIO_ID, HTCFG_UART_RX_AFIO_PIN,  AFIO_FUN_USART_UART);

  69.   {
  70.     USART_InitTypeDef USART_InitStructure = {0};
  71.     USART_InitStructure.USART_BaudRate = 9600;
  72.     USART_InitStructure.USART_WordLength = USART_WORDLENGTH_8B;
  73.     USART_InitStructure.USART_StopBits = USART_STOPBITS_1;
  74.     USART_InitStructure.USART_Parity = USART_PARITY_NO;
  75.     USART_InitStructure.USART_Mode = USART_MODE_NORMAL;
  76.     USART_Init(HTCFG_UART_PORT, &USART_InitStructure);
  77.   }

  78.   NVIC_EnableIRQ(HTCFG_UART_IRQn);
  79.   USART_IntConfig(HTCFG_UART_PORT, USART_INT_RXDR, ENABLE);
  80.   USART_TxCmd(HTCFG_UART_PORT, ENABLE);
  81.   USART_RxCmd(HTCFG_UART_PORT, ENABLE);
  82. }

  83. void LEDC_Configuration(void)
  84. {
  85.   LEDC_InitTypeDef LEDC_InitStruct;
  86.   CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
  87.   CKCUClock.Bit.LEDC       = 1;
  88.   CKCU_PeripClockConfig(CKCUClock, ENABLE);
  89.   LEDC_InitStruct.LEDC_ClockSource    = LEDC_SRC_LSI;  
  90.   LEDC_InitStruct.LEDC_ClockPrescaler = HTCFG_LEDC_CLOCK_PRESCAL - 1;  
  91.   LEDC_InitStruct.LEDC_DutyClockNumber = HTCFG_LEDC_DUTY_CLOCK_NUMBER;  
  92.   LEDC_InitStruct.LEDC_COMxEN = HTCFG_LEDC_COM1EN | HTCFG_LEDC_COM2EN |\
  93.                                 HTCFG_LEDC_COM3EN | HTCFG_LEDC_COM4EN;   
  94.   LEDC_InitStruct.LEDC_DeadTime = 0;
  95.   LEDC_Init(&LEDC_InitStruct);                        
  96.   LEDC_SetPolarityMode(HTCFG_LEDC_COM1POL | HTCFG_LEDC_COM2POL | HTCFG_LEDC_COM3POL | HTCFG_LEDC_COM4POL,
  97.                        LEDC_SEG0POL | LEDC_SEG1POL | LEDC_SEG2POL | LEDC_SEG3POL |\
  98.                        LEDC_SEG4POL | LEDC_SEG5POL | LEDC_SEG6POL | LEDC_SEG7POL,
  99.                        COMMON_CATHODE);

  100.   LEDC_IntConfig(ENABLE);         
  101.   NVIC_EnableIRQ(LEDC_IRQn);
  102.   LEDC_Cmd(ENABLE);      
  103. }
  104. void GPIO_Configuration(void)
  105. {
  106.   CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
  107.   CKCUClock.Bit.AFIO       = 1;
  108.   CKCU_PeripClockConfig(CKCUClock, ENABLE);

  109.   AFIO_GPxConfig(HTCFG_LEDC_SEG0_GPIO_ID, HTCFG_LEDC_SEG0_AFIO_PIN, AFIO_FUN_LEDC);
  110.   AFIO_GPxConfig(HTCFG_LEDC_SEG1_GPIO_ID, HTCFG_LEDC_SEG1_AFIO_PIN, AFIO_FUN_LEDC);
  111.   AFIO_GPxConfig(HTCFG_LEDC_SEG2_GPIO_ID, HTCFG_LEDC_SEG2_AFIO_PIN, AFIO_FUN_LEDC);
  112.   AFIO_GPxConfig(HTCFG_LEDC_SEG3_GPIO_ID, HTCFG_LEDC_SEG3_AFIO_PIN, AFIO_FUN_LEDC);
  113.   AFIO_GPxConfig(HTCFG_LEDC_SEG4_GPIO_ID, HTCFG_LEDC_SEG4_AFIO_PIN, AFIO_FUN_LEDC);
  114.   AFIO_GPxConfig(HTCFG_LEDC_SEG5_GPIO_ID, HTCFG_LEDC_SEG5_AFIO_PIN, AFIO_FUN_LEDC);
  115.   AFIO_GPxConfig(HTCFG_LEDC_SEG6_GPIO_ID, HTCFG_LEDC_SEG6_AFIO_PIN, AFIO_FUN_LEDC);
  116.   AFIO_GPxConfig(HTCFG_LEDC_SEG7_GPIO_ID, HTCFG_LEDC_SEG7_AFIO_PIN, AFIO_FUN_LEDC);


  117.   AFIO_GPxConfig(HTCFG_LEDC_COM0_GPIO_ID, HTCFG_LEDC_COM0_AFIO_PIN, AFIO_FUN_LEDC);
  118.   AFIO_GPxConfig(HTCFG_LEDC_COM1_GPIO_ID, HTCFG_LEDC_COM1_AFIO_PIN, AFIO_FUN_LEDC);
  119.   AFIO_GPxConfig(HTCFG_LEDC_COM2_GPIO_ID, HTCFG_LEDC_COM2_AFIO_PIN, AFIO_FUN_LEDC);
  120.   AFIO_GPxConfig(HTCFG_LEDC_COM3_GPIO_ID, HTCFG_LEDC_COM3_AFIO_PIN, AFIO_FUN_LEDC);
  121. }

  122. void UxART_RxTest(void)
  123. {
  124.                                                                           
  125.   if (gURRx_Length >= 6)
  126.   {
  127.                 DiapBuf[0]=NumberChar[(gRx_Buffer[3])&0x0f];
  128.                 DiapBuf[1]=NumberChar[(gRx_Buffer[4]>>4)&0x0f]|0x02;
  129.                 DiapBuf[2]=NumberChar[(gRx_Buffer[4])&0x0f];
  130.                 DiapBuf[3]=0xd1;
  131.     gURRx_Length = 0;
  132.   }
  133. }


运行结果:

a6f31c2c5c4073cc3de032ad386e9bac










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

本版积分规则

41

主题

732

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部

41

主题

732

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部