15块钱的遥控器(T-65 X-WING)的改造利用

本文的主角:
内部主板布局硬件资源:
两个自动回中摇杆、数个微动开关、一个震动马达、一个喇叭、一块锂电(带保护板)、两个蓝牙模块和一个2.4G无线模块 , 其中两个蓝牙模块的型号分别为-V2和 , 2.4G无线模块型号为 (封装TSSOP-16),没找到任何资料 , 问了淘宝上仅有的卖这块芯片三个卖家都说没有资料 , 有大神找到资料的话希望分享分享 。有资料的话可以不改硬件改造成自己的航模遥控器 。
线路:
主控是,据说和STM32是pin to pin兼容 。粗略测出引脚连接情况如下:
主要用的是摇杆的四个引脚和SPI通讯的引脚 , 有些引脚不止控制一个元件 , 需要使用的话要自己测量外部电路 , 纯数字的标号连接的是CON9的 , 最左边的1是GND,左往右第10是3.3V 。板载3.3V稳压 , 长得和1117一个样 , 引脚定义也一样 , 就当是1117了 , 按照1117的标准来说BAT+的输入电压要大于3.3+1.5=4.8V , 测试过5v可以开机 。开机的话可以用原机自带下方的板长按开机 , 也可以短接CON9的12、13脚开机 。
程序烧录

15块钱的遥控器(T-65 X-WING)的改造利用

文章插图
我用ST-LINK V2烧录调试 , 可以用GD32官方的也可以用Jlink 。这里以为例 , 注意SWDAT就是SWDIO 。
3.3V————VDD GND————BAT- SWCLK————SWCLK SWDIO————SWDAT
用Keil编程时需要到GD32的官网下载芯片包 , 建议同时下载数据手册 , 用库开发的话下载固件库 , 目前固件库最新的版本是3.1.0 。初次烧录程序需要stm32 st-link 工具解除,先点击 to the 然后再选择-> Bytes , Read Out 选择 , Read Out 解除 , 之后可以直接用keil烧录程序了 。
摇杆ADC采集
摇杆四个电位器的连接情况:
CH1————PB1 CH2————PA0 CH3————PA5 CH4————PA4
查询数据手册得到对应的ADC通道 , 要注意的是数据手册的版本要和使用的库的版本要一致 , 不同版本的内容会有差异 。具体代码如下:
void ADC_init(void){GPIO_InitPara GPIO_InitStructure;ADC_InitPara ADC_InitStructure;DMA_InitPara DMA_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_PIN_1;GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AN;GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = (GPIO_PIN_0|GPIO_PIN_4|GPIO_PIN_5);GPIO_Init(GPIOA, &GPIO_InitStructure);RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_DMA1,ENABLE);RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_ADCCLK_APB2_DIV6);DMA_DeInit(DMA1_CHANNEL1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC_RDTR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_ConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALSRC;DMA_InitStructure.DMA_BufferSize = 4;DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PERIPHERALDATASIZE_HALFWORD; DMA_InitStructure.DMA_MemoryDataSize = DMA_MEMORYDATASIZE_HALFWORD; DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR; DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH;DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE; DMA_Init(DMA1_CHANNEL1, &DMA_InitStructure);/* Enable DMA1 channel1 */DMA_Enable(DMA1_CHANNEL1, ENABLE);ADC_DeInit(&ADC_InitStructure);ADC_InitStructure.ADC_Mode_Scan = ENABLE;ADC_InitStructure.ADC_Mode_Continuous = DISABLE;ADC_InitStructure.ADC_Trig_External = ADC_EXTERNAL_TRIGGER_MODE_NONE;ADC_InitStructure.ADC_Data_Align = ADC_DATAALIGN_RIGHT;ADC_InitStructure.ADC_Channel_Number = 4;ADC_Init(&ADC_InitStructure);/* ADC regular channels configuration */ ADC_RegularChannel_Config(ADC_CHANNEL_4, 1, ADC_SAMPLETIME_239POINT5);ADC_RegularChannel_Config(ADC_CHANNEL_5, 2, ADC_SAMPLETIME_239POINT5);ADC_RegularChannel_Config(ADC_CHANNEL_0, 3, ADC_SAMPLETIME_239POINT5);ADC_RegularChannel_Config(ADC_CHANNEL_9, 4, ADC_SAMPLETIME_239POINT5);/* Enable ADC DMA */ADC_DMA_Enable(ENABLE); /* Enable ADC */ADC_Enable(ENABLE); ADC_Calibration();/* Start ADC Software Conversion */ ADC_SoftwareStartConv_Enable(ENABLE);}