HAL145L外围电路的设计 + 基于昇润科技SDK 的ADC采样与数据发送
大家好,很荣幸再次在论坛发帖共享我的一些小心得。最近事情有点多,写的仓促了点,望大家包涵。
由于我选择的技术路线为:HAL145L高速霍尔传感器 + 心率传感器 + 手机APP,对应CC2640的对应功能为:中断(或者Timer 计数)+ ADC采样 + BLE 4.2数据收发。
第一篇测评大概讲了下外部中断,今天我来分享下HAL145L外围电路的设计+ 基于昇润科技SDK 的ADC采样与数据发送的经验。
HAL145L引脚顺序为:VCCGND OUT
简单的使用HAL145L很简单,只需要在OUT脚接上拉即可实现较强的推动能力。HAL145L在处于弱磁场中,OUT脚处于高阻态,当外部磁场变强时变为导通,变为低电平。所以只需要将中断触发改为下降沿触发即可。
HAL145L为精密原件,需要进行静电防护。我不太清楚如何做ESD,是所有的引脚都加上3.3V的ESD管子嘛?手头没有多余的东西,我用热熔胶把原件都封上以防止静电。
蓝牙数据发送很简单。昇润科技将UUID等信息已经预先写入SDK了,所以我们只需要调用TTCBleProfileSetParameter函数即可实现在UUID 1002处进行发送数据,于1001处接收数据。
举例:
TTCBleProfileSetParameter(TTCBLE_PROFILE_CHAR2,strlen(value),(u8*)value);
我将发送函数写入上次的外部中断响应里面,按下按钮后通过手机可以看到数据发生变化。
但不理解的是Notify并没有起到作用,我即使开启了手机的Notify仍然不能及时的收到变化后的信息。(初步分析是数据发送过快)
之后为ADC采样,很简单,所以直接上代码。
- #include "TTCBLESDKCommDef.h"
- #include <driverlib/aux_wuc.h>
- #include <driverlib/aux_adc.h>
- #include "TTCDriverADC.h"
- static PIN_Handle adPinHandle;//ADC引脚
- static PIN_State adPinState;
- uint16_t adcValue[3];
- TTCDriverAdcConfing adconfig = {
- .refsource = ADC_REF_VDDA_REL,//参考电压为VDDA
- .time = ADC_TIME_2P7_US,//采样时间为2.7us
- .trigger = ADC_TRIGGER_MANUAL,//手动触发
- .auxIo = ADC_COMPB_IN_AUXIO5//这个需要根据你选择的IO来选择通道,下面会具体讲
- };
- void ADC_Init()
- {
- const PIN_Config adPinConfig[] = {
- Board_ADC0 | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_NOPULL, //配置为浮空输入
- PIN_TERMINATE
- };
- TTCDriverIOOpen(&adPinHandle,&adPinState,(const PIN_Config *)adPinConfig);
- }
- void ADC_ReadVoltage()
- {
- TTCDrvierAdcReadSync(adconfig,3,(uint16_t*)adcValue);
- TTCBleProfileSetParameter(TTCBLE_PROFILE_CHAR2,
- 6,
- (u8*)adcValue);
- }
Board_ADC0,为 IOID_25,所以我们选择通道五。即ADC_COMPB_IN_AUXIO5。
跟前一篇一样的初始化方法。初始化之后,我们将ADC_ReadVoltage放入按钮的中断响应函数。每次按下按钮后,读取通道的数据,即可得到对应的数据。
前一个为ADC接GND获得的原始数据,后一个为悬空时获取的原始数据。
不得不说,昇润科技将SDK做的很容易使用,同时代码的风格与一致性保持的很好,开发者入门后,即可很轻松的进行快速开发。
但有一点不足,include对应的头文件后,经常会出现未定义的问题。虽然这对于有经验的开发者没任何难度,但对于刚入门的开发者,这可能会很大程度上的挫伤自信心。建议在使用的每个头文件中加入程序中使用过的所有头文件以降低报错概率。
到此,本项目所需要的所有前驱技术全部交代完成。接下来几篇文章,我们正式开始进入智能室内健身车的开发。