基于单片机Stm32f103 DAC电流输出解决方案

最近在做电流型信号输出的项目,遇到了些问题这里把这些解决方法做一个笔记方便以后运用。在搞这个的时候因为手册这部分讲的不是很详细,所以在使用上也遇到了些阻力。
用的是64封装的芯, 此芯adc的基准vref+和电源是同一个端口,vref-共用电源地。在电池输出时ad值为0时 取样电阻100欧姆有0.66ma的电流输出,只要在初始化时只要失能端口输出缓冲,输出可到0.0025ma。ok问题就解决了。
1 void analoginit(void)
2 {
3 dac_inittypedef dac_initstructure;
4 gpio_inittypedef gpio_initstructure;
5
6 rcc_apb2periphclockcmd(rcc_apb2periph_afio | rcc_apb2periph_gpioa, enable);
7 /* dac periph clock enable */
8 rcc_apb1periphclockcmd(rcc_apb1periph_dac, enable);
9
10 /* configure dac channe1 output pin */
11 gpio_initstructure.gpio_pin = gpio_pin_4;
12 gpio_initstructure.gpio_speed = gpio_speed_50mhz;
13 gpio_initstructure.gpio_mode = gpio_mode_out_pp;
14 gpio_init(gpioa, &gpio_initstructure);
15
16 /* configure dac channe1 output pin */
17 gpio_initstructure.gpio_pin = gpio_pin_5;
18 gpio_initstructure.gpio_speed = gpio_speed_50mhz;
19 gpio_initstructure.gpio_mode = gpio_mode_out_pp;
20 gpio_init(gpioa, &gpio_initstructure);
21
22
23 /* dac channel1 configuration */
24 dac_initstructure.dac_trigger = dac_trigger_software;
25 dac_initstructure.dac_wavegeneration = dac_wavegeneration_none;
26 dac_initstructure.dac_outputbuffer = dac_outputbuffer_disable; //输出缓冲失能
27 dac_initstructure.dac_lfsrunmask_triangleamplitude = dac_triangleamplitude_4095;
28
29 dac_init(dac_channel_1, &dac_initstructure);
30
31 /* dac channel2 configuration */
32 dac_init(dac_channel_2, &dac_initstructure);
33
34 /* enable dac channel1: once the dac channel1 is enabled, pa.04 is
35 automatically connected to the dac converter. */
36 dac_cmd(dac_channel_1, enable);
37 /* enable dac channel2: once the dac channel2 is enabled, pa.05 is
38 automatically connected to the dac converter. */
39 dac_cmd(dac_channel_2, enable);
40
41 }
42
43 //端口1ad值更新
44 void dac1_update(u16 ch1)
45 {
46 ch1 = (ch1 《《4) & 0xfff0;
47 /* set dac channel1 dhr12l register */
48 dac_setchannel1data(dac_align_12b_l, ch1);
49
50 /* start dac channel1 conversion by software */
51 dac_softwaretriggercmd(dac_channel_1, enable);
52 }
53
54 void dac2_update(u16 ch2)
55 {
56 ch2 = (ch2 《《4) & 0xfff0;
57 /* set dac channel2 dhr12l register */
58 dac_setchannel2data(dac_align_12b_l, ch2);
59
60 /* start dac channel1 conversion by software */
61 dac_softwaretriggercmd(dac_channel_2, enable);
62 }

ISO端口的宽带定向耦合器CPL-WB-00C2介绍
普强信息金融新生态智能语音解决方案
消息称华为下个月发布搭载AMD芯片的台式电脑及麒麟芯片的笔记本电脑
赵伟国与周鸿祎联手打造联合安全实验室
必须要了解的知识ROM、FLASH、硬盘技术知识
基于单片机Stm32f103 DAC电流输出解决方案
电磁流量计简易故障判别
按需定制芯片底部填充胶 汉思化学助力FPC高端制造
如何从源头监测出电池充电可能存在的潜在问题
血氧探头产品的定义及分类,它又有哪些优势
基于STM32单片机的简易蓝牙手环
手机厂商组团搅局电视行业是为哪般?
苹果5G手机不支持700MHz频段5G网络接入
NVIDIA正式推出RTX 30系列移动显卡
HarmonyOS 4稳了! 华为开发者大会详细日程公布
全国电线电缆行业政策相关规定概述
基于直接2D-3D匹配的定位pipeline有效地扩展主动搜索匹配
重合闸如何维护保养,维护保养的方法是怎样的
关于整车控制系统的分析和应用
如何选择合适的Mini LED电视