欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: STM32單片機(jī)+ADXL345(中斷方式)計步器的準(zhǔn)備程序(串口調(diào)試) [打印本頁]

作者: dvxchen    時間: 2022-10-25 22:37
標(biāo)題: STM32單片機(jī)+ADXL345(中斷方式)計步器的準(zhǔn)備程序(串口調(diào)試)
本文介紹了利用ADXL345中斷喚醒停止模式下的STM32F103C8T6,為進(jìn)一步開發(fā)計步器做準(zhǔn)備。
從上位機(jī)串口通訊記錄了整個過程, 代碼中有關(guān)OLED顯示屏可以不接。

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

        Single_Write_ADXL345(THRESH_ACT,0x20);      //檢測活動的閾值為2g時產(chǎn)生中斷,認(rèn)為是開始活動了
        Single_Write_ADXL345(THRESH_INACT,0x01);    //0.1875g,小于它,就認(rèn)為是不活動
        Single_Write_ADXL345(TIME_INACT,0x02);      //不活動2秒,就認(rèn)為是不活動中斷觸發(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ā)的,其它三個標(biāo)志位不用管它
               
        
3. STM32 的進(jìn)入停機(jī)模式:(main.c)
        鋰電池供電的情況下最好采用停機(jī)模式。(低功耗還有待機(jī)模式, 等于從頭開機(jī)運(yùn)行,而行走的步數(shù)需要在喚醒后讀到, 所以不用它)。
        
                /* 進(jìn)入停止模式,設(shè)置電壓調(diào)節(jié)器為低功耗模式,等待中斷喚醒 */
                PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
               
4. 中斷處理函數(shù):(exit.c)
        EXTI0_IRQHandler可以提供給一個按鍵,喚醒顯示步數(shù)在OLED上面,包括打開顯示屏。
        EXTI1_IRQHandler處理的是INT2中斷,setADXL345()函數(shù)記錄了標(biāo)志位為1,供main.c 在主循環(huán)里面進(jì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();
                //清除中斷標(biāo)志位
                EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);     
        }  
}

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

        由中斷設(shè)置的標(biāo)志位在這里處理, ReadData_x(); 讀取到temp_X,temp_Y,temp_Z, 進(jìn)行步數(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;
      }
    }
調(diào)試結(jié)果:
[14:51:28.491]收←◆
進(jìn)入停止模式,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]收←◆
進(jìn)入停止模式,A0端口按鍵或A1端口ADXL345->INT2可喚醒


制作出來的實(shí)物圖如下:


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

作者: dvxchen    時間: 2022-10-26 14:57
本帖最后由 dvxchen 于 2022-10-26 15:12 編輯

調(diào)試結(jié)果:

[14:51:28.491]收←◆
進(jìn)入停止模式,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]收←◆
進(jìn)入停止模式,A0端口按鍵或A1端口ADXL345->INT2可喚醒
作者: dvxchen    時間: 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


作者: dvxchen    時間: 2022-11-16 11:22
注意ADXL的方向性,如圖

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

279078917.jpg





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1