今天玩了下板子的AD模块····木有官方例程,纯手工·····
欢迎观赏。:lol
程序直接调用库函数···发现这个库写的好······坑,
主程序先试了直接初始化AD,然后直接转换,获取值后通过串口上传···研究了一会,还是出来了
上传的值
发现了点问题,在0-4096之间有点波动··难道是我的角位移传感器的问题?(一圈对应电阻的变化)
貌似以前用LPC1768没这问题···
来详解下程序
首先是初始化
void ADC_Init(ADC_MemMapPtr AdcNumber, unsigned char channel, unsigned char GreaterOrLess, unsigned int CompareValue)
看起来好长···:L,第一个变量就让我傻眼了,ADC_MemMapPtr 格式 AdcNumber 值
这个是啥···然后···只好一层层的去找,最终,找出来这样的定义
typedef struct ADC_MemMap {
uint32_t SC1; /**< Status and Control Register 1, offset: 0x0 */
uint32_t SC2; /**< Status and Control Register 2, offset: 0x4 */
uint32_t SC3; /**< Status and Control Register 3, offset: 0x8 */
uint32_t SC4; /**< Status and Control Register 4, offset: 0xC */
uint32_t R; /**< Conversion Result Register, offset: 0x10 */
uint32_t CV; /**< Compare Value Register, offset: 0x14 */
uint32_t APCTL1; /**< Pin Control 1 Register, offset: 0x18 */
} volatile *ADC_MemMapPtr;
和
#define ADC_BASE_PTR ((ADC_MemMapPtr)0x4003B000u)
只要调用ADC_BASE_PTR这个量就可以完成好多量的初始化,好方便,但是如果要修改的话···是修改这个么 ((ADC_MemMapPtr)0x4003B000u)?
求高手解答,
后面3个变量,选择ad通道,比较大于小于?,和比较的值(不初始化的选择0)。
完成初始化直接输出就好
程序就这样了。
深入的还有待研究:lol
欢迎小伙伴们进来讨论和解答啊
|