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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32單片機+ADXL345(中斷方式)計步器的準備程序(串口調試)

[復制鏈接]
跳轉到指定樓層
樓主
ID:249376 發(fā)表于 2022-10-25 22:37 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本文介紹了利用ADXL345中斷喚醒停止模式下的STM32F103C8T6,為進一步開發(fā)計步器做準備。
從上位機串口通訊記錄了整個過程, 代碼中有關OLED顯示屏可以不接。

1. ADXL345寄存器, 有好多,為了觀察明顯,這里設置了ACTIVITY和INACTIVITY模式,都能觸發(fā)INT2:(ADXL345.c)

        Single_Write_ADXL345(THRESH_ACT,0x20);      //檢測活動的閾值為2g時產(chǎn)生中斷,認為是開始活動了
        Single_Write_ADXL345(THRESH_INACT,0x01);    //0.1875g,小于它,就認為是不活動
        Single_Write_ADXL345(TIME_INACT,0x02);      //不活動2秒,就認為是不活動中斷觸發(fā)
        Single_Write_ADXL345(ACT_INACT_CTL,0xEE);   //使能X、Y、Z三軸的Activity和Inactivity功能
        Single_Write_ADXL345(INT_MAP,0x18);         //00011000, Activity和Inactivity 活動都映射到INT2        Single_Write_ADXL345(INT_ENABLE,0x18);    //80 DATA_READY中斷開啟, 10 Activity 08 inactivity   

2.    觀察中斷是哪個活動觸發(fā)的:訪問寄存器:INT_SOURCE (main.c)

        printf("\r\n INT_SOURCE: 0X30= %lX  After Read\r\n",  Single_Read_ADXL345(0X30));  //INT_SOURCE
        
        讀兩遍INT_SOURCE (0X30)可以得到
                INT_SOURCE: 0X30= 93  After Read  93=10010011,從右到左第1位是OVERRUN,第2位是Watermark,第5位是ACTIVITY,第8位是DATA_READY
                INT_SOURCE: 0X30= 83  After Read  83=10000011,可以看到本次中斷是由ACTIVITY觸發(fā)的,其它三個標志位不用管它
               
        
3. STM32 的進入停機模式:(main.c)
        鋰電池供電的情況下最好采用停機模式。(低功耗還有待機模式, 等于從頭開機運行,而行走的步數(shù)需要在喚醒后讀到, 所以不用它)。
        
                /* 進入停止模式,設置電壓調節(jié)器為低功耗模式,等待中斷喚醒 */
                PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
               
4. 中斷處理函數(shù):(exit.c)
        EXTI0_IRQHandler可以提供給一個按鍵,喚醒顯示步數(shù)在OLED上面,包括打開顯示屏。
        EXTI1_IRQHandler處理的是INT2中斷,setADXL345()函數(shù)記錄了標志位為1,供main.c 在主循環(huán)里面進行處理


void EXTI0_IRQHandler(void)
{
                if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET)
        {
                printf("\r\n -----------------------EXTI0_IRQHandler----------------------- \r\n");   
        
          EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);  //清除EXTI0線路掛起位
        }
}

void EXTI1_IRQHandler(void)
{
  //確保是否產(chǎn)生了EXTI Line中斷
        if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET)
        {

                //由于停止喚醒后使用的是HSI時鐘,與原來使用的HSE時鐘時的頻率不一致,會影響波特率,若此處直接printf會亂碼
                printf("\r\n -----------------------EXTI1_IRQHandler----------------------- \r\n");   

                setADXL345();
                //清除中斷標志位
                EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);     
        }  
}

5. 主循環(huán)里的ADXL數(shù)據(jù)讀取:(main.c)

        由中斷設置的標志位在這里處理, ReadData_x(); 讀取到temp_X,temp_Y,temp_Z, 進行步數(shù)的計算。

                if(getADXL345()== 1)       {
      reSetADXL345();  //及時讀取adxl345數(shù)據(jù)
      ReadData_x();                                                  //三軸檢測函數(shù)
                        printf("\r\n temp_X %lf. \r\n",temp_X );
                        printf("\r\n temp_Y %lf. \r\n",temp_Y );
                        printf("\r\n temp_Z %lf. \r\n",temp_Z );
                        printf("\r\n INT_SOURCE: 0X30= %lX  After Read\r\n",  Single_Read_ADXL345(0X30));  //INT_SOURCE
                        printf("\r\n INT_SOURCE: 0X30= %lX  After Read\r\n",  Single_Read_ADXL345(0X30));  //INT_SOURCE
      CheckNum++;
      if((temp_Y>450)||(temp_Y<-450)) //查看正常次數(shù)     
      {
        Normal_num++;  //正常次數(shù)++
                                printf("\r\n Normal_num %d \r\n",Normal_num );
      }
      else
      {
        Error_num++;//傾斜次數(shù)
                                printf("\r\n Error_num %d \r\n",Error_num );
      }
      if((Error_num!=0)&&(Normal_num!=0))//檢測到步數(shù)

      {
                                BuShu++;   //步數(shù)脈沖量++
                                printf("\r\n BuShu %d \r\n",BuShu );
        Error_num=0;    //清除一個周期檢測
        Normal_num=0;
      }
    }
調試結果:
[14:51:28.491]收←◆
進入停止模式,A0端口按鍵或A1端口ADXL345->INT2可喚醒

[14:53:38.943]收←◆\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
[14:53:39.375]收←◆
已退出停止模式

temp_X 124.800003.

temp_Y 254155.203125.

temp_Z 9297.599609.

INT_SOURCE: 0X30= 93  After Read

INT_SOURCE: 0X30= 83  After Read

Normal_num 10

[14:53:40.591]收←◆
-----------------------EXTI1_IRQHandler-----------------------

[14:53:41.577]收←◆
temp_X 156.000000.

temp_Y 254155.203125.

temp_Z 9328.799805.

INT_SOURCE: 0X30= 8A  After Read

INT_SOURCE: 0X30= 83  After Read

Normal_num 11

[14:53:43.771]收←◆
temp_X 187.199997.

temp_Y 254186.406250.

temp_Z 9328.799805.

INT_SOURCE: 0X30= 83  After Read

INT_SOURCE: 0X30= 83  After Read

Normal_num 12

[14:53:52.143]收←◆
進入停止模式,A0端口按鍵或A1端口ADXL345->INT2可喚醒


制作出來的實物圖如下:


Keil代碼下載: Keil程序.7z (211.6 KB, 下載次數(shù): 46)

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:249376 發(fā)表于 2022-10-26 14:57 | 只看該作者
本帖最后由 dvxchen 于 2022-10-26 15:12 編輯

調試結果:

[14:51:28.491]收←◆
進入停止模式,A0端口按鍵或A1端口ADXL345->INT2可喚醒

[14:53:38.943]收←◆\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
[14:53:39.375]收←◆
已退出停止模式

temp_X 124.800003.

temp_Y 254155.203125.

temp_Z 9297.599609.

INT_SOURCE: 0X30= 93  After Read

INT_SOURCE: 0X30= 83  After Read

Normal_num 10

[14:53:40.591]收←◆
-----------------------EXTI1_IRQHandler-----------------------

[14:53:41.577]收←◆
temp_X 156.000000.

temp_Y 254155.203125.

temp_Z 9328.799805.

INT_SOURCE: 0X30= 8A  After Read

INT_SOURCE: 0X30= 83  After Read

Normal_num 11

[14:53:43.771]收←◆
temp_X 187.199997.

temp_Y 254186.406250.

temp_Z 9328.799805.

INT_SOURCE: 0X30= 83  After Read

INT_SOURCE: 0X30= 83  After Read

Normal_num 12

[14:53:52.143]收←◆
進入停止模式,A0端口按鍵或A1端口ADXL345->INT2可喚醒
回復

使用道具 舉報

板凳
ID:249376 發(fā)表于 2022-11-16 10:56 | 只看該作者
原理圖和嘉立創(chuàng)PCB文件

原理圖 STM32F103C8T6_ADXL345.pdf

150.11 KB, 下載次數(shù): 15, 下載積分: 黑幣 -5

計步器 STM32F103C8T6_ADXL345_OLED3.7_PHASE01x.zip

932.69 KB, 下載次數(shù): 15, 下載積分: 黑幣 -5

回復

使用道具 舉報

地板
ID:249376 發(fā)表于 2022-11-16 11:22 | 只看該作者
注意ADXL的方向性,如圖

279078917.jpg (103.04 KB, 下載次數(shù): 88)

279078917.jpg
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色在线免费视频 | 91xxx在线观看 | 欧美在线一区二区三区 | 久久中文免费视频 | 91精品国产色综合久久 | 午夜色婷婷 | 久久久久久久久99 | 欧美成人在线免费 | 亚洲区在线 | 一区二区三区在线 | 婷婷久久综合 | 一级毛片在线看 | 国产精品福利在线观看 | 91pao对白在线播放 | 韩国av一区二区 | 人人艹人人爽 | wwwww在线观看 | 在线观看av免费 | 99久久精品国产一区二区三区 | 涩涩视频在线观看 | 日中文字幕在线 | 日韩欧美一级精品久久 | 黄色毛片在线看 | 国产情侣激情 | 在线观看成人免费视频 | 欧产日产国产精品视频 | 精品一区二区三区在线观看国产 | 日韩精品一区二区三区第95 | 午夜色婷婷 | 97精品超碰一区二区三区 | 国产成人黄色 | 欧美成人精品 | 欧美亚洲综合久久 | 在线观看黄免费 | 一级欧美一级日韩片 | 91黄在线观看 | 在线视频亚洲 | 婷婷综合网 | 欧美电影在线观看网站 | 一区二区三区久久 | 亚洲精品一区中文字幕乱码 |