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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2377|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STC8H單片機(jī)通過(guò)SPI驅(qū)動(dòng)ADXL345三軸加速度計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:912806 發(fā)表于 2022-1-22 16:53 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
使用FwLib_STC8封裝庫(kù)

  1. // Copyright 2021 IOsetting

  2. /***
  3. * Demo: ADXL345
  4. * Board: STC8H8K64U
  5. *                                8H8K64U
  6. * GND       -> GND               G
  7. * VDD(Vcc)  -> VCC               V
  8. * CS        -> GPIO OUT P35      34
  9. * INT1      -> GPIO IN  P36 INT2 35
  10. * INT2      -> GPIO IN  P37 INT3 36
  11. * SDO       -> MISO     P33      30
  12. * SDI/SDA   -> MOSI     P34      31
  13. * SCL       -> SCLK     P32      29
  14. */

  15. #include "fw_hal.h"
  16. #include "adxl345.h"
  17. #include <stdio.h>

  18. volatile uint8_t count_int2 = 0, count_int3 = 0, count_double_tap = 0;
  19. volatile int16_t x, y, z;

  20. void SPI_Init(void)
  21. {
  22.     // ADXL345, SPI CLK max frequency is 5MHz
  23.     SPI_SetClockPrescaler(SPI_ClockPreScaler_16);
  24.     // Clock is high when idle
  25.     SPI_SetClockPolarity(HAL_State_ON);
  26.     // Data transfer is driven by lower SS pin
  27.     SPI_SetClockPhase(SPI_ClockPhase_TrailingEdge);
  28.     // MSB first
  29.     SPI_SetDataOrder(SPI_DataOrder_MSB);
  30.     // Define the output pins
  31.     SPI_SetPort(SPI_AlterPort_P35_P34_P33_P32);
  32.     // Ignore SS pin, use MSTR to swith between master/slave mode
  33.     SPI_IgnoreSlaveSelect(HAL_State_ON);
  34.     // Master mode
  35.     SPI_SetMasterMode(HAL_State_ON);
  36.     // Start SPI
  37.     SPI_SetEnabled(HAL_State_ON);
  38. }

  39. void GPIO_Init(void)
  40. {
  41.     // Configure GPIO pins before SPI and device
  42.     // MISO(P33), MOSI(P34)
  43.     GPIO_P3_SetMode(GPIO_Pin_3|GPIO_Pin_4, GPIO_Mode_InOut_QBD);
  44.     // SCLK(P32), CS(P35),
  45.     GPIO_P3_SetMode(GPIO_Pin_2|GPIO_Pin_5, GPIO_Mode_Output_PP);
  46.     // INT2(P36), INT3(P37)
  47.     GPIO_P3_SetMode(GPIO_Pin_6|GPIO_Pin_7, GPIO_Mode_Input_HIP);
  48. }

  49. void INT_Init()
  50. {
  51.     EXTI_Int2_SetIntState(HAL_State_ON);
  52.     EXTI_Int3_SetIntState(HAL_State_ON);
  53.     EXTI_Global_SetIntState(HAL_State_ON);
  54. }

  55. INTERRUPT(Int2_Routine, EXTI_VectInt2)
  56. {
  57.     count_int2++;
  58.     if (ADXL345_IsInterrupt(ADXL345_INT_DOUBLE_TAP) > 0)
  59.     {
  60.         count_double_tap++;
  61.     }
  62.    
  63. }

  64. INTERRUPT(Int3_Routine, EXTI_VectInt3)
  65. {
  66.     count_int3++;
  67.     x = ADXL345_ReadInt(ADXL345_REG_DATAX0);
  68.     y = ADXL345_ReadInt(ADXL345_REG_DATAY0);
  69.     z = ADXL345_ReadInt(ADXL345_REG_DATAZ0);
  70. }

  71. int main(void)
  72. {
  73.     SYS_SetClock();
  74.     GPIO_Init();
  75.     UART1_Config8bitUart(UART1_BaudSource_Timer1, HAL_State_ON, 115200);
  76.     SPI_Init();
  77.     INT_Init();
  78.     ADXL345_Init(
  79.         ADXL345_DATARATE_100_HZ,
  80.         ADXL345_SPI_WIRE_4,
  81.         ADXL345_INT_ACTIVE_LOW,
  82.         ADXL345_DATA_RESOLVE_FULL,
  83.         ADXL345_DATA_ALIGNMENT_RIGHT,
  84.         ADXL345_G_RANGE_8G
  85.     );
  86.     // Tap threshold: 62.5mg / LSB, value = 2.5g / 0.0625g = 0x28
  87.     ADXL345_WriteByte(ADXL345_REG_THRESH_TAP, 0x28);
  88.     // Tap duration: 625us / LSB, value = 0.02s / 0.000625s = 0x20
  89.     ADXL345_WriteByte(ADXL345_REG_DUR, 0x20);
  90.     // Tap latency: 1.25ms / LSB, value = 0.1s / 0.00125s = 0x50
  91.     ADXL345_WriteByte(ADXL345_REG_LATENT, 0x50);
  92.     // Tap window: 1.25ms / LSB, value = 0.3s / 0.00125s = 0xF0
  93.     ADXL345_WriteByte(ADXL345_REG_WINDOW, 0xF0);
  94.     ADXL345_EnableTapDetectOnAxes(
  95.         ADXL345_TAP_DETECT_AXIS_X|ADXL345_TAP_DETECT_AXIS_Y|ADXL345_TAP_DETECT_AXIS_Z);
  96.     ADXL345_SetInterrupts(
  97.         ADXL345_INT_DATA_READY|ADXL345_INT_SINGLE_TAP|ADXL345_INT_DOUBLE_TAP);
  98.     ADXL345_RemapInterrupts(ADXL345_INT_DATA_READY);

  99.     // read to clear interrupts, or the counter will never receive interrupts
  100.     x = ADXL345_ReadInt(ADXL345_REG_DATAX0);
  101.     y = ADXL345_ReadInt(ADXL345_REG_DATAY0);
  102.     z = ADXL345_ReadInt(ADXL345_REG_DATAZ0);
  103.     x = ADXL345_ReadByte(ADXL345_REG_INT_SOURCE);

  104.     while(1)
  105.     {
  106.         printf("X:%6d, Y:%6d, Z:%6d, DAT:%3d, TAP:%3d, 2-TAP:%3d\r\n",
  107.             x, y, z, count_int3, count_int2, count_double_tap);
  108.         SYS_Delay(50);
  109.     }
  110. }
復(fù)制代碼

關(guān)于代碼的說(shuō)明
https://www.cnblogs.com/milton/p/15821704.html

完整代碼查看
Github: https://github.com/IOsetting/FwLib_STC8/tree/master/demo/spi/adxl345
Gitee:
https://gitee.com/iosetting/fw-lib_-stc8/tree/master/demo/spi/adxl345

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

使用道具 舉報(bào)

沙發(fā)
ID:704640 發(fā)表于 2022-7-9 16:29 | 只看該作者
老師好,請(qǐng)教一下,void GPIO_Init(void) {     // Configure GPIO pins before SPI and device     // MISO(P33), MOSI(P34)     GPIO_P3_SetMode(GPIO_Pin_3|GPIO_Pin_4, GPIO_Mode_InOut_QBD);     // SCLK(P32), CS(P35),     GPIO_P3_SetMode(GPIO_Pin_2|GPIO_Pin_5, GPIO_Mode_Output_PP);     // INT2(P36), INT3(P37)     GPIO_P3_SetMode(GPIO_Pin_6|GPIO_Pin_7, GPIO_Mode_Input_HIP); },,,,,,再加上上面的FW_hal庫(kù),這個(gè)好像是STM32HAL的代碼吧?為什么在這里能上STC8,不明白
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品第一区二区 | 91在线一区二区三区 | 成人在线精品 | 成人福利在线观看 | 亚洲视频国产 | 亚洲视频一区在线播放 | 手机看片169| 亚洲在线观看视频 | 欧美色性 | a级免费黄色片 | 91在线视频观看免费 | 亚洲综合在线播放 | 久久久网 | 91婷婷韩国欧美一区二区 | 久久久久国产精品免费免费搜索 | 欧美激情视频一区二区三区在线播放 | 成人免费在线网 | 国产美女精品 | 亚洲一区久久 | 成人三级电影 | 欧美日韩亚洲在线 | 精品99久久| 日韩免费视频 | 日韩一级二级片 | 九九综合| 日韩欧美黄色 | 国产精品久久久久久久久久免费 | 中文字幕一区在线观看视频 | 久久国内精品 | 97av| 欧美成人h版在线观看 | 一级毛片色一级 | 久久99精品久久久久久国产越南 | 久久久久国产一区二区三区 | 麻豆久久久 | 亚洲视频二区 | 亚洲影视在线 | 亚洲精品久久久久久久久久久久久 | 亚洲高清一区二区三区 | 毛片站 | 国产黄色在线观看 |