娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32之霍爾傳感器模塊

發布者:MysticalGarden最新更新時間:2020-01-28 來源: eefocus關鍵字:STM32  霍爾傳感器模塊  磁場傳感器 手機看文章 掃描二維碼
隨時隨地手機看文章

一、簡介


本文介紹如何在STM32上使用霍爾傳感器模塊。


二、實驗平臺


庫版本:STM32F10x_StdPeriph_Lib_V3.5.0


編譯軟件:MDK4.53


硬件平臺:STM32開發板(主芯片stm32f103c8t6


仿真器:JLINK


三、版權聲明


四、實驗前提

1、在進行本文步驟前,請先閱讀以下博文:

暫無


2、在進行本文步驟前,請先實現以下博文:

暫無


五、基礎知識


1、霍爾傳感器是什么?


答:霍爾傳感器是根據霍爾效應制作的一種磁場傳感器


用磁鐵去靠近霍爾傳感器時,霍爾傳感器的引腳電平會產生變化。


2、霍爾傳感器主要用在什么地方?


答:霍爾傳感器可測速、計數、限位上。


舉例限位功能:兩個霍爾傳感器形成45°的夾角,電機邊緣粘著一個磁鐵,一旦電機轉動導致磁鐵觸發任意其中一個霍爾傳感器,則STM32檢測到觸發后立刻停止電機,不能再繼續往此方向轉動。以此達到限制電機轉動角度的作用。


3、本文使用的是什么霍爾傳感器模塊?


答:

香瓜買的霍爾傳感器模塊一共有四個引腳,GND、VCC、D0、A0。


其中只需要用到三根線,GND、VCC、D0。(A0不知做啥用的,計數?)


使用方法:


1)5V供電。


2)用跳線連接D0和STM32的IO口(本文連接的是PA11)。


3)D0默認是高電平,但磁鐵的特定一面(磁鐵另一面無用)去靠近霍爾傳感器模塊時,D0會被拉低。


4、霍爾傳感器與限位開關有什么區別?


答:


1)限位開關


①優點:無功耗。


②缺點:易損壞。


2)霍爾傳感器


①優點:不易損壞。


②缺點:有功耗。


六、實驗步驟


1、編寫并添加霍爾傳感器驅動


1)編寫驅動GUA_Hall_Sensor.c(存放在“……HARDWARE”)


//******************************************************************************              

//name:             GUA_Hall_Sensor.c             

//introduce:        霍爾傳感器驅動      

//author:           甜甜的大香瓜                     

//email:            897503845@qq.com     

//QQ group          香瓜單片機之STM8/STM32(164311667)                  

//changetime:       2017.03.06                     

//******************************************************************************

#include "stm32f10x.h" 

#include "GUA_Hall_Sensor.h"

 

/*********************宏定義************************/

//霍爾傳感器引腳

#define GUA_HALL_SENSOR_PORT               GPIOA

#define GUA_HALL_SENSOR_PIN                GPIO_Pin_11

 

//消抖總次數

#define GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT      500000

/*********************內部變量************************/

static GUA_U32 sGUA_Hall_Sensor_DisapperasShakes_IdleCount = 0; //消抖時的空閑狀態計數值

static GUA_U32 sGUA_Hall_Sensor_DisapperasShakes_TriggerCount = 0; //消抖時的觸發狀態計數值

 

/*********************內部函數************************/ 

static void GUA_Hall_Sensor_IO_Init(void);

 

//******************************************************************************            

//name:             GUA_Hall_Sensor_IO_Init           

//introduce:        霍爾傳感器的IO初始化         

//parameter:        none                 

//return:           none         

//author:           甜甜的大香瓜                 

//email:            897503845@qq.com     

//QQ group          香瓜單片機之STM8/STM32(164311667)                  

//changetime:       2017.03.06                     

//******************************************************************************

static void GUA_Hall_Sensor_IO_Init(void)

{

//IO結構體

GPIO_InitTypeDef GPIO_InitStructure;

//時鐘使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

//霍爾IO配置

GPIO_InitStructure.GPIO_Pin = GUA_HALL_SENSOR_PIN; 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 

GPIO_Init(GUA_HALL_SENSOR_PORT, &GPIO_InitStructure);

}

 

//******************************************************************************        

//name:             GUA_Hall_Sensor_Check_Pin        

//introduce:        霍爾傳感器檢測觸發狀態     

//parameter:        none       

//return:           GUA_HALL_SENSOR_STATUS_IDLE or GUA_HALL_SENSOR_STATUS_TRIGGER     

//author:           甜甜的大香瓜             

//email:            897503845@qq.com     

//QQ group          香瓜單片機之STM8/STM32(164311667)                  

//changetime:       2017.03.06                     

//******************************************************************************  

GUA_U8 GUA_Hall_Sensor_Check_Pin(void)    

{    

  //沒觸發

  if(GPIO_ReadInputDataBit(GUA_HALL_SENSOR_PORT, GUA_HALL_SENSOR_PIN) == SET) 

  {

    //計數

    sGUA_Hall_Sensor_DisapperasShakes_IdleCount++;

    sGUA_Hall_Sensor_DisapperasShakes_TriggerCount = 0;

    

    //判斷計數是否足夠

    if(sGUA_Hall_Sensor_DisapperasShakes_IdleCount >= GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT)

    {

      return GUA_HALL_SENSOR_STATUS_IDLE;    

    }

  }

  //觸發

  else

  {

    //計數

    sGUA_Hall_Sensor_DisapperasShakes_IdleCount = 0;

    sGUA_Hall_Sensor_DisapperasShakes_TriggerCount++;

    

    //判斷計數是否足夠

    if(sGUA_Hall_Sensor_DisapperasShakes_TriggerCount >= GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT)

    {

      return GUA_HALL_SENSOR_STATUS_TRIGGER;    

    }    

  }  

  

  return GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS;  

 

//******************************************************************************        

//name:             GUA_Limit_Switch_Init        

//introduce:        霍爾傳感器初始化     

//parameter:        none       

//return:           none      

//author:           甜甜的大香瓜             

//email:            897503845@qq.com     

//QQ group          香瓜單片機之STM8/STM32(164311667)                  

//changetime:       2017.03.06                     

//****************************************************************************** 

void GUA_Hall_Sensor_Init(void)

{

  //初始化IO

  GUA_Hall_Sensor_IO_Init();   

}


2)編寫驅動頭文件GUA_Hall_Sensor.h(存放在“……HARDWARE”)

//******************************************************************************              

//name:             GUA_Hall_Sensor.h             

//introduce:        霍爾傳感器驅動的頭文件      

//author:           甜甜的大香瓜                     

//email:            897503845@qq.com         

//QQ group          香瓜單片機之STM8/STM32(164311667)                      

//changetime:       2017.03.06                     

//****************************************************************************** 

#ifndef _GUA_HALL_SENSOR_H_

#define _GUA_HALL_SENSOR_H_

 

/*********************宏定義************************/  

//類型宏

#ifndef GUA_U8        

typedef unsigned char GUA_U8;        

#endif    

 

#ifndef GUA_8        

typedef signed char GUA_8;        

#endif      

      

#ifndef GUA_U16        

typedef unsigned short GUA_U16;        

#endif 

 

#ifndef GUA_16        

typedef signed short GUA_16;        

#endif         

      

#ifndef GUA_U32        

typedef unsigned long GUA_U32;        

#endif 

 

#ifndef GUA_32        

typedef signed long GUA_32;       

#endif

 

#ifndef GUA_U64    

typedef unsigned long long GUA_U64;  

#endif

 

#ifndef GUA_64    

typedef signed long long GUA_64;  

#endif

 

//霍爾傳感器的觸發狀態

#define GUA_HALL_SENSOR_STATUS_TRIGGER                      0 //霍爾傳感器觸發

#define GUA_HALL_SENSOR_STATUS_IDLE                         1 //霍爾傳感器沒觸發

#define GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS             2 //霍爾傳感器消抖中

 

/*********************外部函數聲明************************/ 

GUA_U8 GUA_Hall_Sensor_Check_Pin(void);  

void GUA_Hall_Sensor_Init(void);

 

#endif


3)工程中添加GUA_Hall_Sensor.c

4)在MDK設置中添加串口驅動源文件路徑

2、在應用層中調用


1)添加驅動頭文件(main.c中)


#include "GUA_Hall_Sensor.h"


2)添加驅動初始化代碼(main.c的main函數中)

  //霍爾傳感器初始化

  GUA_Hall_Sensor_Init(); 


3)添加測試代碼

①寫測試代碼(main.c中)


static void GUA_Test(void)

{   

  U8 nGUA_Ret = 0;

  U8 nGUA_Stop = 0;

  while(1)

  {

[1] [2]
關鍵字:STM32  霍爾傳感器模塊  磁場傳感器 引用地址:STM32之霍爾傳感器模塊

上一篇:STM32之電量采集
下一篇:STM32之timer2的精準延時

推薦閱讀最新更新時間:2025-05-21 23:31

《嵌入式-STM32開發指南》第一部分 入門篇 - 第3章 搭建開發環境
3.1簡介 STM常用的集成開發環境(IDE)有KEIL和IAR。 表1 IDE相應工具 圖1 IDE編譯過程 3.2 KEIL安裝 3.2.1概述 Keil MDK(Microcontroller Developer Kit微控制器開發工具)-ARM是美國Keil軟件公司(現已被ARM公司收購)出品的支持ARM微控制器的一款IDE(集成開發環境)。 MDK-ARM包含了工業標準的Keil C編譯器、宏匯編器、調試器、實時內核等組件。具有業行領先的ARM C/C++編譯工具鏈,完美支持Cortex-M、Cortex-R4、ARM7和ARM9系列器件,包含世界上品牌的芯片。比如:ST、Atmel、Freescale、NXP、
[單片機]
STM32】EEPROM讀寫浮點數、負整數
浮點數、負整數拆分與還原 問題:EEPROM需要按照字節存儲,浮點數、負整數占用多個字節,當需要讀寫浮點數和負整數至EEPROM時,需要對浮點數、負整數拆分與還原。 方法:獲取存儲浮點數、負整數的變量的指針,將該指針強制轉換為uint8*的指針,然后利用該指針將浮點數、負數拆分成單個字節;將拆分后的字節寫入uint8型的數組中,然后將數組的指針強制轉換為拆分前變量的指針類型,即可重新還原浮點數、負整數。代碼如下: #include stdlib.h #define uint8 unsigned char #define uint16 unsigned short #define uint32 unsigned int #de
[單片機]
STM32選型考量指標
項目中選擇的具體型號為M4。該芯片的特點:Cortex-M內核、低功耗、外設豐富。具體原因如下: 1. STM32的競爭優勢: 1)極高的性能,主流的Cortex內核 2)豐富合理的外設,合理的功耗,合理的價格 3)強大的軟件支持:豐富的軟件包 4)全面豐富的技術文檔 5)芯片型號鐘磊多,覆蓋面廣 6)強大的用戶基礎:最先成功試水CM4芯片的公司,積累了大量的用戶群體,為其領先做了鋪墊 2. STM32是新的基于ARM內核的32位MCU系列,標準的ARM架構。 3. 超前的體系結構: 1)高性能 2)低電壓 3)低功耗 4)創新的內核以及外設 4. 對于影響運算性能的因素考慮:
[單片機]
STM32代碼的啟動過程
分享這篇文章,談一下STM32啟動流程。如果讀者朋友已經有過匯編相關基礎,能夠夠好理解本文內容。匯編語言是比C語言更接近機器底層的編程語言,能讓我們更好的理解和操縱硬件底層。 STM32三種啟動模式 下好程序后,重啟芯片時,SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存,這就是所謂的啟動過程。 STM32上電或者復位后,代碼區始終從0x00000000開始,其實就是將存儲空間的地址映射到0x00000000中。三種啟動模式如下: 從主閃存存儲器啟動,將主Flash地址0x08000000映射到0x00000000,這樣代碼啟動之后就相當于從0x08000000開始。主閃存存儲器是STM32內置的Flash,作為芯片內置的
[單片機]
Archlinux下 stm32 燒寫工具配置
1. 使用的開發板子 使用的開發板是好幾年好幾年前買的了,板子一直在家里睡覺。最近閑著沒事,所以打算學習一下stm32. 板子是普中STM32-PZ6806L開發板。開發板的圖見下 puzhongkaifaban.png 2. stm32 燒入程序原理 我們這里使用ISP(In-System Programming)燒入. ISP 燒入使用串口. 這個開發板子提供了上圖的6的位置是一個miniUSB,5的位置是一個usb轉串口的芯片。5,6的原理圖見下: yuanli.png 其中串口的 DTR引腳控制STM32的重置。 RTS引腳控制STM32的boot選擇。 我們要想燒入程序:要把開發版上面的34的位置的跳冒 BOOT
[單片機]
STM32學習筆記1】Cortex-M3與STM32基本概念
前言 本系列文章統一圍繞STM32F103C8T6最小系統開發板進行記錄,如涉及其他開發板將會特別說明。 ARM處理器 ARM(Advanced RISC Machine)是一個32位精簡指令集(RISC)處理器架構,應用于許多嵌入式系統設計中。其中,自從ARMv7系列架構開始,ARM公司推出了Cortex系列,并根據不同的應用場景推出了Cortex-M,Cortex-A和Cortex-R三款不同方向的產品。 Cortex系列產品對比 Cortex-M3與STM32概述 ARM代表了一種芯片標準,體現了芯片的架構設計,而具體涉及到存儲器容量,片上外設,IO引腳數等實現,則是由不同的芯片廠商進行設計的,比如當前最主流的ST
[單片機]
stm32的RTC
兩個分離的時鐘:用于APB1接口的PCLK1和RTC時鐘的(RTC時鐘的頻率必須小于PCLK1時鐘頻率的四分之一); RTC的時鐘源的配置可以使用函數庫中的函數進行配置; RTC的中斷也是使用函數庫中的額函數進行配置的; void RTC_Configuration(void) {//RTC的時鐘為兩個分離的時鐘:用于APB1的PCLK1和RTC時鐘(RTC的時鐘的頻率必須小于PCLK1時鐘頻率的四分之一以上 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE); //PWR和BKP時鐘使能 PWR_BackupAccessCmd(ENAB
[單片機]
<font color='red'>stm32</font>的RTC
一個關于STM32 CAN出錯恢復的話題
最近有個STM32 用戶咨詢: “最近在使用stm32f105做雙can通信,can驅動芯片使用的TJA1042,發現將canH canL 短路再放開以后,can出錯恢復不回來?之前在K40上使用的時候沒有這個問題,不知道這個情況大家有什么指導建議啊?” 另外,他還附上了基于STM32CUBEMX工具配置的相關代碼如下: hcan1.Instance = CAN1; hcan1.Init.Prescaler = 2; hcan1.Init.Mode = CAN_MODE_NORMAL; hcan1.Init.SJW = CAN_SJW_1TQ; hcan1.Init.BS1 = CAN_BS1_8TQ; hcan1.I
[單片機]
一個關于<font color='red'>STM32</font> CAN出錯恢復的話題
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

隨便看看

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 郓城县| 桓仁| 商洛市| 光泽县| 射阳县| 遂昌县| 环江| 白山市| 皮山县| 洪雅县| 清流县| 扎兰屯市| 长阳| 望谟县| 白河县| 韶山市| 郧西县| 三门峡市| 汶上县| 苏尼特右旗| 柳河县| 聂拉木县| 依兰县| 卓尼县| 兴文县| 敖汉旗| 洛隆县| 滕州市| 收藏| 达州市| 安吉县| 巴里| 临清市| 海兴县| 江北区| 汪清县| 津市市| 车致| 长汀县| 高要市| 阜平县|