久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2566|回復: 0
打印 上一主題 下一主題
收起左側

ESK32-360開發板的傳感器測量及輸出顯示

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 jinglixixi 于 2020-8-21 21:16 編輯

傳感器測量離不開3件事,輸入輸出、延時及時序控制。
1. 延時函數
鑒于ESK32-360開發板在SYSTICK程序中只提供了ms級的延時函數,而未提供us級的延時函數,使得程序設計時極為不便,為此添加了us級延時函數。
  1. void Delayus(u32 nTime)
  2. {
  3.   /* Enable the SysTick Counter */
  4.   SYSTICK_CounterCmd(SYSTICK_COUNTER_ENABLE);
  5.   DelayTime = nTime;
  6.   while(DelayTime != 0);
  7.   /* Disable SysTick Counter */
  8.   SYSTICK_CounterCmd(SYSTICK_COUNTER_DISABLE);
  9.   /* Clear SysTick Counter */
  10.   SYSTICK_CounterCmd(SYSTICK_COUNTER_CLEAR);
  11. }
復制代碼

在使用時,因為ms級和us級延時函數是基于同一個基準時鐘,故在使用前需調整基準時鐘。
在ms級延時時,使用下列語句:
SYSTICK_IntConfig(DISABLE);
SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000);
SYSTICK_IntConfig(ENABLE);
在us級延時時,使用如下語句:
SYSTICK_IntConfig(DISABLE);
SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000000);
SYSTICK_IntConfig(ENABLE);

ms級延時的驗證主程序如下:
  1. int main(void)
  2. {
  3.   SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
  4.   SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000);
  5.   SYSTICK_IntConfig(ENABLE);
  6.   /* Initialize LEDs */
  7.   HT32F_DVB_LEDInit(HT_LED1);
  8.   HT32F_DVB_LEDInit(HT_LED2);
  9.   HT32F_DVB_LEDInit(HT_LED3);
  10.   /* Infinite loop */
  11.   while(1)
  12.   {
  13.        /* Toggle LEDs  */
  14.        HT32F_DVB_LEDToggle(HT_LED1);
  15.        HT32F_DVB_LEDToggle(HT_LED2);
  16.        HT32F_DVB_LEDToggle(HT_LED3);
  17.        Delay(500);
  18.   }
  19. }
復制代碼

2. GPIO口輸入輸出
鑒于SD卡接口處于空置狀態,故可用做GPIO來使用并進行功能擴展,從而化解資源的緊張的情況。
1)GPIO口輸出
為便于輸出口的配置,特定義了一個專用的函數,其內容為:
  1. void HT32F_DVB_OUT_Init(void)
  2. {
  3.   HT32F_DVB_ClockConfig();
  4.   //   PD0 、 PC12
  5.   HT32F_DVB_GPxConfig(GPIO_PD, GPIO_PIN_0, 0);
  6.   HT32F_DVB_GPxConfig(GPIO_PC, GPIO_PIN_12, 0);
  7.   HT_GPIOD->SRR = GPIO_PIN_0;
  8.   HT_GPIOC->SRR = GPIO_PIN_12;
  9.   GPIO_PullResistorConfig(HT_GPIOD, GPIO_PIN_0, GPIO_PR_DISABLE);
  10.   GPIO_DriveConfig(HT_GPIOD, GPIO_PIN_0, GPIO_DV_8MA);
  11.   GPIO_DirectionConfig(HT_GPIOD, GPIO_PIN_0, GPIO_DIR_OUT);
  12.   GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_12, GPIO_PR_DISABLE);
  13.   GPIO_DriveConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DV_8MA);
  14.   GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DIR_OUT);
  15. }
復制代碼
此外,還定義了一個GPIO口的時鐘啟動函數,其內容為:
  1. void HT32F_DVB_ClockConfig(void)
  2. {
  3.   CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
  4.   u8 RegCK[5] = {0};
  5.   RegCK[3] = 1;  //  啟動PD口
  6.   RegCK[2] = 1;  //  啟動PC口
  7.   CKCUClock.Bit.PA         = RegCK[0];
  8.   CKCUClock.Bit.PB         = RegCK[1];
  9.   CKCUClock.Bit.PC         = RegCK[2];
  10.   CKCUClock.Bit.PD         = RegCK[3];
  11.   CKCUClock.Bit.AFIO       = 1;
  12.   CKCU_PeripClockConfig(CKCUClock, ENABLE);
  13. }
復制代碼

驗證函數功能的主程序為:
  1. int main(void)
  2. {
  3.      SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
  4.      SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000);   
  5.      SYSTICK_IntConfig(ENABLE);
  6.      // LED1 & PC12
  7.      HT32F_DVB_OUT_Init();
  8.      while(1)
  9.      {
  10.         /* Toggle LEDs  */
  11.         HT_GPIOD->SRR = GPIO_PIN_0;
  12.         HT_GPIOC->RR = GPIO_PIN_12;
  13.         Delay(1000);
  14.         HT_GPIOD->RR = GPIO_PIN_0;
  15.         HT_GPIOC->SRR = GPIO_PIN_12;
  16.         Delay(1000);
  17.     }
  18. }
復制代碼

經程序的下載驗證,可實現指定GPIO口的輸出功能。
2)GPIO口輸入
為便于輸入口的配置,所定義得專用函數為:
  1. void HT32F_DVB_IN_Init(void)
  2. {
  3.          AFIO_GPxConfig(GPIO_PC, GPIO_PIN_12, 0);
  4.          GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_12, GPIO_PR_UP);  // down ?
  5.          GPIO_InputConfig(HT_GPIOC, GPIO_PIN_12, ENABLE);
  6. }
復制代碼

注:為配置相應的時鐘,需在HT32F_DVB_ClockConfig()函數中添加語句:
RegCK[2] = 1;   // 啟動PC口

驗證函數功能的主程序為:
  1. int main(void)
  2. {
  3.      SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
  4.      SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000);
  5.      SYSTICK_IntConfig(ENABLE);
  6.      HT32F_DVB_OUT_Init();
  7.      while(1)
  8.      {   
  9.           // PC12=KEY
  10.           if(GPIO_ReadInBit(HT_GPIOC, GPIO_PIN_12)==0)        
  11.           {
  12.                 HT_GPIOD->SRR = GPIO_PIN_0;
  13.           }
  14.           else
  15.           {
  16.                 HT_GPIOD->RR = GPIO_PIN_0;
  17.           }
  18.          Delay(1000);
  19.     }
  20. }
復制代碼

經程序下載,當按下連接PC12的按鍵時,可見到LED1發生變化,說明指定GPIO口的輸入功能正確。
3. 串行通訊輸出信息
除了使用LED顯示按鍵狀態外,還可以使用串行通訊來輸出按鍵狀態,它可以反映出比LED更豐富的信息。
實現按鍵狀態輸出的主程序如下:
  1. int main(void)
  2. {
  3.          SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
  4.          SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000);
  5.          SYSTICK_IntConfig(ENABLE);
  6.          HT32F_DVB_OUT_Init();
  7.          UxART_Configuration();
  8.          while(1)
  9.          {
  10.                    if(GPIO_ReadInBit(HT_GPIOD, GPIO_PIN_1)==0)
  11.                    {
  12.                          HT_GPIOD->SRR = GPIO_PIN_0;
  13.                          gHelloString[3] ='0';
  14.                          UxART_TxTest();     
  15.                    }
  16.                    else
  17.                    {
  18.                         HT_GPIOD->RR = GPIO_PIN_0;
  19.                         gHelloString[3] = '1';
  20.                         UxART_TxTest();     
  21.                    }
  22.                    Delay(1000);
  23.          }
  24. }
復制代碼

                             
圖1  按鍵狀態輸出

4. I2C總線模擬與BH1750光強檢測
BH1750是一款基于I2C接口的數字式光強傳感器,我們可利用SD卡接口空出的引腳來模擬I2C接口以驅動該傳感器,從而進行光強檢測。
BH1750與MCU的連接關系如下:
SCL --- PC11
SDA --- PC12

定義相關引腳輸出高低電平的引腳為:
#define SCL_Set()         HT_GPIOC->SRR = GPIO_PIN_11
#define SCL_Clr()          HT_GPIOC->RR = GPIO_PIN_11

#define SDA_Set()        HT_GPIOC->SRR = GPIO_PIN_12
#defineSDA_Clr()          HT_GPIOC->RR =GPIO_PIN_12
BH1750的初始化函數為:
  1. void IIC_Init(void)
  2. {
  3.             HT32F_DVB_ClockConfig();
  4.         
  5.             GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_12, GPIO_PR_DISABLE);
  6.             GPIO_DriveConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DV_8MA);
  7.             GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DIR_OUT);
  8.         
  9.             GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_11, GPIO_PR_DISABLE);
  10.             GPIO_DriveConfig(HT_GPIOC, GPIO_PIN_11, GPIO_DV_8MA);
  11.             GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_11, GPIO_DIR_OUT);
  12. }
復制代碼
BH1750的讀取函數為:
  1. void Get_Sunlight_Value()
  2. {
  3.         int dis_data=0;
  4.         float temp;
  5.         char i=0;
  6.         unsigned int sd;
  7.         Single_Write_BH1750(0x01);  // power on
  8.         Single_Write_BH1750(0x10);  // H- resolution mode
  9.         Delayms(180);
  10.         Multiple_Read_BH1750();
  11.         for(i=0;i<3;i++)
  12.         dis_data=gHelloString[0];
  13.         dis_data=(dis_data<<8)+gHelloString[1];
  14.         temp=(float)dis_data/1.2;
  15.         sd=temp;
  16.         gHelloString[0] = sd/10000+'0';
  17.         gHelloString[1] = sd% 10000/1000+'0';
  18.         gHelloString[2] = sd % 1000/100+'0';
  19.         gHelloString[3] = sd % 100/10+'0';
  20.         gHelloString[4] = sd % 10+'0';
  21.         UxART_TxTest();        
  22. }
復制代碼

光強檢測的主函數為:
  1. int main(void)
  2. {
  3.         SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
  4.         SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000);
  5.         SYSTICK_IntConfig(ENABLE);
  6.         UxART_Configuration();
  7.         IIC_Init();
  8.         while(1)
  9.         {
  10.                    Get_Sunlight_Value();
  11.                    Delayms(1000);
  12.         }
  13. }
復制代碼

經程序下載后,其運行結果如圖所示。

圖2 BH1750檢測結果







評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天综合干 | 久久机热 | 成人国产一区二区三区精品麻豆 | 国产在线精品一区二区三区 | 成人啊啊啊 | 97免费在线视频 | 日本a视频 | 99久久99热这里只有精品 | 亚洲日日夜夜 | 久久另类视频 | 亚洲一区二区三区视频免费观看 | 亚洲精久久久 | 久久久久成人精品免费播放动漫 | 欧美精品久久 | 精品国产乱码久久久久久1区2区 | 欧美一区二区三区小说 | 国产精品国产成人国产三级 | 精品欧美一区二区精品久久 | 国产免费福利小视频 | 亚洲精品永久免费 | 久久久久久久久久久久久91 | 天天天操天天天干 | 国产精品123区 | 亚洲国产成人精品女人 | 在线欧美视频 | 四虎影院在线免费观看 | 天天久久 | 一区网站 | 日韩在线一区二区 | 成年男女免费视频网站 | 亚洲免费精品 | 国产激情网 | 日韩av在线不卡 | 亚洲日本欧美日韩高观看 | 久久爱黑人激情av摘花 | 999视频| 免费黄色的视频 | 欧美精品被 | 久久精品国产99国产精品亚洲 | 99视频网站 | 国产精品久久久久久久久久久久久 |