在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【CW32模塊使用】雙軸按鍵搖桿模塊

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2025-03-29 17:23 ? 次閱讀

雙軸按鍵游戲搖桿模塊,采用 PS2游戲手柄上金屬按鍵搖桿電位器。模塊特設二路模擬輸出和一路數字輸出接口、輸出值分別對應(X、Y)雙軸偏移量、其類型為模擬量、按鍵表示用戶是否在Z軸上按下、其類型為數字開關量、用其可以輕松控制物體,在二維空間運動、因此可以通控制器編程傳感器擴展板插接、完成具有創意性遙控互動作品。

一、模塊來源

模塊實物展示:

wKgZPGflMoWASaIXAAAZ8BIZGZw925.jpg

二、規格參數

驅動電壓:3.3V~5V

控制方式:ADC+GPIO

以上信息見廠家資料文件

三、移植過程

我們的目標是將例程移植至CW32F030C8T6開發板上【能夠控制電機旋轉速度的功能】。首先要獲取資料,查看數據手冊應如何實現讀取數據,再移植至我們的工程。

3.1查看資料

輸出信號:模塊特設二路模擬輸出(VRX,VRY)和一路數字輸出接口(SW),二路模擬輸出值分別對應(X,Y)雙軸偏移量,其類型為模擬量;按鍵表示用戶是否在Z軸上按下,其類型為數字開關量。

十字搖桿為一個雙向的10K電阻器,隨著搖桿方向不同,抽頭的阻值隨著變化。本模塊如果使用5V供電,原始狀態下X,Y讀出電壓為2.5V左右,當隨箭頭方向按下,讀出電壓值減少,限小為0V。

3.2引腳選擇

VRX與VRY使用ADC功能。

想要使用ADC,需要確定使用的引腳是否有ADC外設功能。

當前只有AO引腳需要使用到ADC接口,所以DO引腳可以使用開發板上其他的GPIO。這里選擇使用PA1和PA2的附加ADC功能。使用ADC的第1道和2通道。

wKgZO2flMoWASIekAAClLFymW44730.jpg

ADC功能引腳

wKgZPGflMoaAPw8FAADqpBXA0lw421.jpg

模塊接線圖

3.3移植至工程

移植步驟中的導入.c和.h文件與【CW32模塊使用】DHT11溫濕度傳感器相同,只是將.c和.h文件更改為bsp_joystick.c與bsp_joystick.h。這里不再過多講述,移植完成后面修改相關代碼。

在文件bsp_joystick.c中,編寫如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-21     LCKFB-LP    first version
 */

#include "drv_spi.h"



/** 硬件SPI */
#define SPI_WAIT_TIMEOUT       ((uint16_t)0xFFFF)

/**
  * @brief :SPI初始化(硬件)
  * @param :無
  * @note  :無
  * @retval:無
  */
void drv_spi_init( void )
{
        GPIO_InitTypeDef GPIO_InitStruct1;             // GPIO初始化結構體
        GPIO_InitTypeDef GPIO_InitStruct2;             // GPIO初始化結構體

        SPI_GPIO_RCC();                                // 使能GPIO時鐘
        RCC_SPI_HARDWARE_ENABLE();                     // 使能SPI1時鐘

        // GPIO復用為SPI1
        BSP_SPI_AF_SCK();
        BSP_SPI_AF_MISO();
        BSP_SPI_AF_MOSI();

        GPIO_InitStruct1.Pins = SPI_NSS_GPIO_PIN|
                                                        SPI_CLK_GPIO_PIN|
                                                        SPI_MOSI_GPIO_PIN;      // GPIO引腳
        GPIO_InitStruct1.Mode = GPIO_MODE_OUTPUT_PP;    // 推挽輸出
        GPIO_InitStruct1.Speed = GPIO_SPEED_HIGH;       // 輸出速度高
        GPIO_Init(SPI_GPIO_PORT, &GPIO_InitStruct1);    // 初始化

        GPIO_InitStruct2.Pins = SPI_MISO_GPIO_PIN;      // GPIO引腳
        GPIO_InitStruct2.Mode = GPIO_MODE_INPUT_PULLUP; // 上拉輸入
        GPIO_Init(SPI_GPIO_PORT, &GPIO_InitStruct2);    // 初始化

        spi_set_nss_high();  // 片選拉高

        SPI_InitTypeDef  SPI_InitStructure; // SPI 初始化結構體

        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;    // 雙線全雙工
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                         // 主機模式
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                     // 幀數據長度為8bit
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                            // 時鐘空閑電平為低
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                          // 第1個邊沿采樣
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                             // 片選信號由SSI寄存器控制
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;    // 波特率為PCLK的8分頻
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                    // 最高有效位 MSB 收發在前
        SPI_InitStructure.SPI_Speed = SPI_Speed_Low;                          // 低速SPI

        SPI_Init(PORT_SPI, &SPI_InitStructure);   // 初始化
        SPI_Cmd(PORT_SPI, ENABLE);   // 使能SPI1
}

/**
  * @brief :SPI收發一個字節
  * @param :
  * @TxByte: 發送的數據字節
  * @note  :非堵塞式,一旦等待超時,函數會自動退出
  * @retval:接收到的字節
  */
uint16_t drv_spi_read_write_byte( uint8_t TxByte )
{
        uint16_t l_Data = 0;
        uint16_t l_WaitTime = 0;

    while(RESET == SPI_GetFlagStatus(PORT_SPI, SPI_FLAG_TXE))//等待發送緩沖區為空
        {
                if( SPI_WAIT_TIMEOUT == ++l_WaitTime )
                {
                        break;                        //如果等待超時則退出
                }
        }
        l_WaitTime = SPI_WAIT_TIMEOUT / 2;                //重新設置接收等待時間(因為SPI的速度很快,正常情況下在發送完成之后會立即收到數據,等待時間不需要過長)
        SPI_SendData(PORT_SPI, TxByte);//發送數據

    while(RESET == SPI_GetFlagStatus(PORT_SPI, SPI_FLAG_RXNE))//等待接收緩沖區非空
        {
                if( SPI_WAIT_TIMEOUT == ++l_WaitTime )
                {
                                break;                        //如果等待超時則退出
                }
        }
    l_Data = SPI_ReceiveData(PORT_SPI);//讀取接收數據

        return l_Data;                //返回
}

/**
  * @brief :SPI收發字符串
  * @param :
  * @ReadBuffer: 接收數據緩沖區地址
  * @WriteBuffer:發送字節緩沖區地址
  * @Length:字節長度
  * @note  :非堵塞式,一旦等待超時,函數會自動退出
  * @retval:無
  */
void drv_spi_read_write_string( uint8_t* ReadBuffer, uint8_t* WriteBuffer, uint16_t Length )
{
    spi_set_nss_low( );//拉低片選
        while( Length-- )
        {
                *ReadBuffer = drv_spi_read_write_byte( *WriteBuffer ); //收發數據
                ReadBuffer++;
                WriteBuffer++;                                //讀寫地址加1
        }
    spi_set_nss_high( );//拉高片選
}

在文件bsp_joystick.h中,編寫如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-21     LCKFB-LP    first version
 */

#ifndef __DRV_SPI_H__
#define __DRV_SPI_H__

#include "board.h"


//SPI引腳定義
#define SPI_GPIO_RCC()           __RCC_GPIOA_CLK_ENABLE() // GPIO時鐘

#define SPI_GPIO_PORT            CW_GPIOA

#define SPI_CLK_GPIO_PIN         GPIO_PIN_5
#define SPI_MISO_GPIO_PIN        GPIO_PIN_6
#define SPI_MOSI_GPIO_PIN        GPIO_PIN_7
#define SPI_NSS_GPIO_PIN         GPIO_PIN_4


#define spi_set_nss_high( )      GPIO_WritePin(SPI_GPIO_PORT, SPI_NSS_GPIO_PIN, GPIO_Pin_SET)   //片選置高
#define spi_set_nss_low( )       GPIO_WritePin(SPI_GPIO_PORT, SPI_NSS_GPIO_PIN, GPIO_Pin_RESET) //片選置低



/******** 硬件SPI修改此次 ********/
#define RCC_SPI_HARDWARE_ENABLE()         __RCC_SPI1_CLK_ENABLE()
#define PORT_SPI                          CW_SPI1

//GPIO AF
#define BSP_SPI_AF_SCK()                  PA05_AFx_SPI1SCK()
#define BSP_SPI_AF_MISO()                 PA06_AFx_SPI1MISO()
#define BSP_SPI_AF_MOSI()                 PA07_AFx_SPI1MOSI()


void drv_spi_init( void );
uint16_t drv_spi_read_write_byte( uint8_t TxByte );
void drv_spi_read_write_string( uint8_t* ReadBuffer, uint8_t* WriteBuffer, uint16_t Length );

#endif

四、移植驗證

在自己工程中的main主函數中,編寫如下。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-25     LCKFB-LP    first version
 */
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_joystick.h"

int32_t main(void)
{
    board_init();

    uart1_init(115200);

    ADC_Joystick_Init();

    printf("Demo Start.....rn");

    while(1)
    {
        if( Get_SW_state() == 0 )
        {
            printf("按鈕按下!!rn");
        }

        printf("X = [%d]rn",Get_Joystick_Percentage_value(0));
        printf("Y = [%d]rn",Get_Joystick_Percentage_value(1));
        printf("n");

        delay_ms(200);
    }
}

移植現象:移動搖桿并且按下,輸出搖桿移動的數據。

wKgZO2flMoaAB5WCAADi0AsUINE552.jpg

模塊移植成功案例代碼:

鏈接:https://pan.baidu.com/s/1tubySHCtuFABDPQ1RjK40g?pwd=LCKF

提取碼:LCKF

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2763

    瀏覽量

    48639
  • 游戲
    +關注

    關注

    2

    文章

    760

    瀏覽量

    26547
  • 按鍵
    +關注

    關注

    4

    文章

    225

    瀏覽量

    57843
  • CW32
    +關注

    關注

    1

    文章

    232

    瀏覽量

    982
收藏 人收藏

    評論

    相關推薦

    CW32移植Free-RTOS】CW32開發者扶持計劃

    CW32配置Free-RTOS全過程,CW32開發者扶持計劃
    的頭像 發表于 04-18 09:38 ?6419次閱讀
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>開發者扶持計劃

    【應用筆記】CW32 電容式觸摸按鍵設計指南

    前言CW32電容式觸摸按鍵設計指南向客戶提供一種利用CW32內部資源結合軟件編程實現電容式觸摸按鍵有效觸摸檢測的方法。本指南的內容重點在于工作原理、軟件檢測過程以及調試指引。利用芯源半
    的頭像 發表于 07-04 11:44 ?1238次閱讀
    【應用筆記】<b class='flag-5'>CW32</b> 電容式觸摸<b class='flag-5'>按鍵</b>設計指南

    【外設移植】按鍵搖桿模塊Ai-M61開發板

    按鍵搖桿模塊采用金屬按鍵搖桿電位器,
    的頭像 發表于 03-12 15:24 ?1254次閱讀
    【外設移植】<b class='flag-5'>雙</b><b class='flag-5'>軸</b><b class='flag-5'>按鍵</b><b class='flag-5'>搖桿</b><b class='flag-5'>模塊</b>Ai-M61開發板

    【項目展示】基于CW32的遙控循跡小車

    藍牙模塊、OLED屏幕、TB6612和紅外循跡模塊組成,電源采用可充電鋰電池供電,建議不要使用 1.5V 干電池供電。 圖1 CW32小車 二、硬件部分 2.1主控板 小車主控板由小藍板和控制底板組成,小藍板通過排母與控制底板
    的頭像 發表于 05-31 17:33 ?1593次閱讀
    【項目展示】基于<b class='flag-5'>CW32</b>的遙控循跡小車

    NanoPi +重力搖桿

    介紹JoystickMatrix-Joystick是一個按鍵搖桿模塊,由兩個滑動變阻器和一個按鍵
    發表于 11-13 17:25

    PS2游戲操縱桿搖桿模塊

    PS2游戲操縱桿搖桿模塊按鍵搖桿)產品簡介:
    發表于 07-19 09:40

    STM32搖桿控制空心杯電機搖桿傳感器

    STM32搖桿控制空心杯電機搖桿傳感器??PS2
    發表于 09-07 08:43

    搖桿模塊說明

    37種傳感器(十三)之搖桿模塊+Stduino Nano&UNO本文轉載自:關鍵詞:51、stm32、arduino、stduino單片機、stduino UNO&Nano、搖桿模塊
    發表于 12-01 07:09

    CW32飯盒派開發板試用體驗】4. ADC采樣搖桿模塊X和Y輸出

    器 前言 本文主要講解如何使用ADC,板載了一個電位計連接到了PB00上,官方提供了示例工程,本文就不做過多說明了。 本文使用ADC采集搖桿模塊的模擬量,搖桿的X與Y
    發表于 06-01 22:13

    CW32電容式觸摸按鍵設計指南

    CW32 電容式觸摸按鍵設計指南向客戶提供一種利用 CW32 內部資源結合軟件編程實現電容式觸摸按鍵有效觸摸檢測的方法。本指南的內容重點在于工作原理、軟件檢測過程以及調試指引。利用芯源
    發表于 09-15 06:00

    CW32 電容式觸摸按鍵設計指南

    CW32 電容式觸摸按鍵設計指南
    的頭像 發表于 10-25 16:36 ?1225次閱讀
    <b class='flag-5'>CW32</b> 電容式觸摸<b class='flag-5'>按鍵</b>設計指南

    基于CW32的RC522刷卡模塊的應用

    基于CW32的RC522刷卡模塊的應用
    的頭像 發表于 11-02 14:53 ?1388次閱讀
    基于<b class='flag-5'>CW32</b>的RC522刷卡<b class='flag-5'>模塊</b>的應用

    基于CW32的物聯網應用

    CW32】基于CW32的物聯網應用
    的頭像 發表于 11-02 15:55 ?977次閱讀
    基于<b class='flag-5'>CW32</b>的物聯網應用

    基于CW32的遙控循跡小車

    本實驗是使用CW32單片機制作一個入門的遙控循跡小車。遙控采用藍牙配合手機APP進行遙控。循跡使用一個5路的循跡模塊。使用OLED模塊進行顯示當前小車狀態。
    的頭像 發表于 11-17 17:46 ?1244次閱讀
    基于<b class='flag-5'>CW32</b>的遙控循跡小車

    【GD32F303紅楓派開發板使用手冊】第十二講 ADC-按鍵搖桿多通道循環采樣實驗

    本實驗是通過ADC規則組多通道循環采樣方式實現按鍵搖桿傳感器x和y電壓值的讀取,通過本實驗主要學習以下內容: ?
    的頭像 發表于 06-11 09:40 ?848次閱讀
    【GD32F303紅楓派開發板使用手冊】第十二講   ADC-<b class='flag-5'>雙</b><b class='flag-5'>軸</b><b class='flag-5'>按鍵</b><b class='flag-5'>搖桿</b>多通道循環采樣實驗
    主站蜘蛛池模板: 久久天天躁夜夜躁狠狠躁2015 | 午夜欧美精品久久久久久久 | 一区二区三区四区在线观看视频 | 又粗又硬又大久久久 | 美女被视频网站在线看九色 | 84pao强力永久免费高清 | 黄网站色视频免费看无下截 | 欧美射射射 | 2022年永久免费观看 | 美女写真mm爽爽爽 | 天天鲁天天爽精品视频 | 一级在线免费视频 | 午夜视频www | 一级毛片在线播放 | 中文天堂在线www | 视频免费播放 | 天堂-bt种子| 亚洲综合五月天婷 | 国产精品9999久久久久仙踪林 | 色色激情网| 男人天堂伊人网 | 天天狠天天透天干天天怕处 | 日本国产视频 | 黄网站视频观看免费 | 丁香综合在线 | 免费一级毛片在级播放 | 天天色狠狠干 | 欧美日韩a | 久久久五月 | 噜噜色噜噜色 | 日本高清视频成人网www | 五月婷婷一区二区 | 国产精品丝袜 | 欧美尺寸又黑又粗又长 | 午夜精品网 | 国产一区二区高清在线 | 欧美综合精品一区二区三区 | 极品美女洗澡后露粉嫩木耳视频 | 国模欢欢炮交啪啪150 | 日本一卡二卡≡卡四卡精品 | 国产精品久久久久久一级毛片 |