历史上的今天
今天是:2024年12月12日(星期四)
2019年12月12日 | Stm32f103 DAC 学习笔记
2019-12-12 来源:eefocus
最近在做电流型信号输出的项目,遇到了些问题这里把这些解决方法做一个笔记方便以后运用。在搞这个的时候因为手册这部分讲的不是很详细,所以在使用上也遇到了些阻力。
用的是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 }
下一篇:STM32之重定向printf
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:16 编辑 有谁画过高频类的PCB板并且性能稳定,我以前画的总是干扰太大,网上的一些抗干扰的方法说的又比较抽象,没有具体实物 请画过的帮忙传一份上来吧,小弟下回去研究研究。最好能有一些注释说明的 ...… 查看全部问答> |
|
我们公司要招一名Linux下的蓝牙开发工程师。公司地址在上海中山公园附近。薪资待遇1万/月。 职位要求: 1、精通LINUX系统以及C/C++编程(必须)。 2、熟悉嵌入式系统、单片机的开发。 3、精通蓝牙协议、蓝牙应用开发(必须)。 4、至少三年以 ...… 查看全部问答> |
|
CS8900、CS8900A芯片是Cirrus Logic公司生产的一种局域网处理芯片,在嵌入式领域中使用非常常见。它的封装是100-pin TQFP,内部集成了在片RAM、10BASE-T收发滤波器,并且提供8位和16位两种接口,一般在单片机中,使用了CS8900的8位 ...… 查看全部问答> |
|
最近也在学习C2000,如果用库的话可以在controlSTIUE的例程的目录中,复制一个,然后在其工程中编制自己的程序。其好处是可以在FLASH中运行。 但我看坛子里的童鞋都用非库。所以我也看看非库但非库只能在RAM中运行。至于怎么在FLASH ...… 查看全部问答> |




