电子说
前言
本文通过 RT-Thread Studio 配置 N32L406 片上外设 DAC 的功能,通过使用dac_open,dac_write,dac_close函数实现DAC的使用,不需要配置底层就能实现开发板PA4输出指定的电压值。
步骤
dac使用说明
打开N32L40x系列数据手册,查看资源可以发现当前芯片支持1路DAC,引脚为PA4,在进行RTT配置的就是默认是PA4,不用进行通道选择。
新建工程
打开rt-studio,基于开发板新建工程
点击RT-Thread Setting,打开DAC设备框架
在芯片设备驱动中打开DAC驱动
drv_dac解读
添加这一小节的原因是当前芯片只有1路DAC,后面编程需要用到,打开drv_dac.c文件。
共由5个函数组成,分别是n32_dac_init(),n32_dac_enable(),n32_dac_disable(),n32_set_dac_value(),以及rt_hw_dac_init()函数组成,其中主要关注n32_set_dac_value(),如下所示:
在使用dac设备的时候,实际上rt_dac_write()函数中,通道值已经不发生作用,在程序设计的时候只需关注设置的值就可以了。
dac设备通过这个操作集实现对DAC的控制
测试代码
在applications下新建test_dac.c,添加以下代码
#include
#include
#include
#define DAC_DEV_NAME "dac" /* DAC 设备名称 /
#define DAC_DEV_CHANNEL 0 / DAC 通道 /
#define REFER_VOLTAGE 330 / 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS (1 << 12) /* 转换位数为12位 */
static int dac_vol_sample(int argc, char argv[])
{
rt_dac_device_t dac_dev;
rt_uint32_t value, vol;
rt_err_t ret = RT_EOK;
/ 查找设备 /
dac_dev = (rt_dac_device_t)rt_device_find(DAC_DEV_NAME);
if (dac_dev == RT_NULL)
{
rt_kprintf("dac sample run failed! can't find %s device!n", DAC_DEV_NAME);
return RT_ERROR;
}
/ 打开通道 /
ret = rt_dac_enable(dac_dev, DAC_DEV_CHANNEL);
/ 设置输出值 /
//value = atoi(argv[1]);
value = 2000;
rt_dac_write(dac_dev, DAC_DEV_CHANNEL, value);
rt_kprintf("the value is :%d n", value);
/ 转换为对应电压值 /
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the voltage is :%d.%02d n", vol / 100, vol % 100);
/ 延时查看效果,关闭通道后无输出 /
rt_thread_mdelay(5000);
/ 关闭通道 /
ret = rt_dac_disable(dac_dev, DAC_DEV_CHANNEL);
return ret;
}
/ 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(dac_vol_sample, dac voltage convert sample);
代码验证
编译并将程序下载到开发板中,打开终端
输入help命令
将万用表达到电压档,正极接到PA4, 输入dac_vol_sample命令,查看终端输出
查看万用表测量到的电压值,如下所示,输出设置的电压值。
总结
使用RT-Thread的设备驱动框架能很快的入手一款开发板,实现硬件底层与应用的分离,同时可以对接离线包,短时间内将开发板使用起来。
全部0条评论
快来发表一下你的评论吧 !