求助一个关于PSV的CPU频率的质量问题统计累计频率

1 / 1226 页
昨天&10:18
昨天&13:19
昨天&20:35
昨天&15:05
昨天&14:35
前天&12:37
昨天&12:30
昨天&14:28
昨天&22:07
前天&20:59
昨天&00:20
1 / 1226 页
Powered by关于STM32的ADC/DAC问题集锦 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 42266|回复: 9
关于STM32的ADC/DAC问题集锦
在线时间0 小时
主题帖子精华
中级会员, 积分 385, 距离下一级还需 115 积分
中级会员, 积分 385, 距离下一级还需 115 积分
1、STM32的DAC转换是什么开始的呢?
问:STM32的DAC转换是什么开始的呢?如何利用DAC输出一个脉宽的控的单脉冲呢?
答:DAC是通过写入DAC输出寄存器开始的。另外,如果想要脉冲,使用TIM功能。
2、STM32的DAC输出电压
问:DAC的输出电压是如何调节的呢,输入的数字量和输出的电压怎么不成比例呢,输出电压不符合数据手册上提供的公式(DAC输出 = VREF X DOR / 4095),求高人指点,程序如下:
#include &stm32f10x_lib.h&
#define DAC_DHR8R1_Address 0x
DAC_InitTypeDef DAC_InitS
DMA_InitTypeDef DMA_InitS
ErrorStatus HSEStartUpS
uc8 Escalator8bit[50] = {0x0, 0x33, 0x66, 0x99, 0xcc, 0xff};
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void Delay(vu32 nCount);
int main(void)
#ifdef DEBUG
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
TIM_PrescalerConfig(TIM6, 0xF, TIM_PSCReloadMode_Update);
TIM_SetAutoreload(TIM6, 0xFF);
TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_N
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_D
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DMA_DeInit(DMA2_Channel3);
DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R1_A
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&Escalator8
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize = 6;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_D
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_E
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_B
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_B
DMA_InitStructure.DMA_Mode = DMA_Mode_C
DMA_InitStructure.DMA_Priority = DMA_Priority_H
DMA_InitStructure.DMA_M2M = DMA_M2M_D
DMA_Init(DMA2_Channel3, &DMA_InitStructure);
DMA_Cmd(DMA2_Channel3, ENABLE);
DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_DMACmd(DAC_Channel_1, ENABLE);
TIM_Cmd(TIM6, ENABLE);
void RCC_Configuration(void)
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
void GPIO_Configuration(void)
GPIO_InitTypeDef GPIO_InitS
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
void NVIC_Configuration(void)
#ifdef VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
void Delay(vu32 nCount)
for(; nCount != 0; nCount--);
输出电压为什么不是0~3.3V呢?
答1:(u32)&Escalator8你把这个里面的数据强制转换为32位,也就是0x0, 0x33, 0x66, 0x99转换为一个32位的数据,你这样做是不对的。你应该定义一个16位的数组,然后VREF X DOR / 4095算出DOR的值,DOR的值不能超过4095.
答2:DAC_OutputBuffer - 输出缓存 使能再试试
1、关于STM32F103RE的DAC
问:关于STM32F103RE中有几个DAC呢?是只有一个DAC(包括两个通道)还是有两个呢?
答:有2个,这个你可以到引脚图上面看到。
2、STM32F107的DAC例程都用TIMx更新启动DMA2
问:STM32F107的DAC例程都用TIMx更新启动DMA2,没有不用TIMx启动DMA2自动把数据传送DAC的DHRxx寄存器里面?该如何设置呢?
答:不用TIM只能自己写时间判断了.可以在while()里面写一个计数器的处理或者延时的处理.
3、STM32F107可以带多个外置式ADC吗?如果可以最多可以带多少个?
问:STM32F107可以带多个外置式ADC吗?如果可以最多可以带多少个?
答:一共有16个痛多的ADC,外置式是什么类型连接的?
答:外置式ADC型号是AD7490的 16通道,SPI接口。因为总共有38路模拟量的,我想用三个外置ADC。另外我想问一下是不是可以只用一个SPI接口就可以连接三个外置ADC呢?如果可以怎么做片选呢?万分感谢!
答:用其他3个IO做片选就可以
6、STM32F2 ADC
问:STM32F系列单片机中ADC的每个通道的采用周期都是可配置的,我想问一下采样周期配置的越大转换出来的值越精确吗?比如STM32F2处理器的ADC采用周期可以是3、15、28、56、84、112、144、480.还有就是ADC中分为规则组和注入组,这两种模式在使用上有什么本质的不同吗?
答:&span style=&font-size: 10.5 font-family: 'Times New Roman'; mso-spacerun: 'yes'&&ADC采用周期越大采集间隔越长,这个值越小采集越精确。 规则组 此模式通过设置ADC_CR1寄存器上的DISCEN位激活。它可以用来执行一个短序列的n次转换&font face=&Times New Roman&&(n
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间0 小时
主题帖子精华
新手上路, 积分 67, 距离下一级还需 -17 积分
新手上路, 积分 67, 距离下一级还需 -17 积分
回复:关于STM32的ADC/DAC问题集锦
整理成文档就更好了!!
在线时间0 小时
主题帖子精华
新手上路, 积分 140, 距离下一级还需 -90 积分
新手上路, 积分 140, 距离下一级还需 -90 积分
RE:关于STM32的ADC/DAC问题集锦
DAC问题一,是改成下面这样吗?
u16 Sine12bit[32] = {, , , , ,
& && && && && && && & , , , , ,&&
& && && && && && && & 599, 344, 155, 38, 0, 38, 155, 344, 599, 909, };
u32 DualSine12bit[32];
u8 Idx = 0;
for (Idx= 0; Idx
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间0 小时
主题帖子精华
新手上路, 积分 104, 距离下一级还需 -54 积分
新手上路, 积分 104, 距离下一级还需 -54 积分
回复:关于STM32的ADC/DAC问题集锦
正缺这个呢
在线时间0 小时
主题帖子精华
新手上路, 积分 694, 距离下一级还需 -644 积分
新手上路, 积分 694, 距离下一级还需 -644 积分
RE:关于STM32的ADC/DAC问题集锦
不错!要是做成文档拿就在好不过了
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间0 小时
主题帖子精华
新手上路, 积分 183, 距离下一级还需 -133 积分
新手上路, 积分 183, 距离下一级还需 -133 积分
RE:关于STM32的ADC/DAC问题集锦
这个要看看
在线时间0 小时
主题帖子精华
新手上路, 积分 32, 距离下一级还需 18 积分
新手上路, 积分 32, 距离下一级还需 18 积分
RE:关于STM32的ADC/DAC问题集锦
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间0 小时
主题帖子精华
新手上路, 积分 0, 距离下一级还需 50 积分
新手上路, 积分 0, 距离下一级还需 50 积分
RE:关于STM32的ADC/DAC问题集锦
楼主好人啊
在线时间3 小时
主题帖子精华
初级会员, 积分 74, 距离下一级还需 126 积分
初级会员, 积分 74, 距离下一级还需 126 积分
RE:关于STM32的ADC/DAC问题集锦
关于STM32F103单片机AD问题
用STM32F103zet6自带AD测量一个电压,用6位半电表测得该电压稳定可靠。
请教几个问题:
(1)为什么只要单片机重新复位或者断电再上电以后测得的AD值与复位之前测得的AD值差距比较大?
(2)上电选择好一个通道校准完AD之后,进行AD测量时测得的值比较稳定,多次测量偏差很小,再重新配置一下之前那个的通道(即再调用一次之前配置那个通道的函数,例如ADC_RegularChannelConfig(ADC1,ADC_Channel_13,1,ADC_SampleTime_239Cycles5);)得到的AD值与之前的AD值偏差比较大,求解原因?
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间0 小时
主题帖子精华
新手上路, 积分 5, 距离下一级还需 45 积分
新手上路, 积分 5, 距离下一级还需 45 积分
回复:关于STM32的ADC/DAC问题集锦
我们使用的是连续转换模式,同样的代码,其它板卡可以正常转换,但是其中一个板卡读出的ADC转换结果始终是零。将该通道配置为普通IO口使用,输入、输出电平均正常。莫非输入电压过高,将ADC输入通道烧毁了?我们是将PB1口配置为ADC输入通道,用来采集电池电压。在一次连续充电后,出现了该问题。请教各路高手。
站长推荐 /1
本次课程将使用理论结合实践的授课方式,介绍智能硬件的全新开发方式,让大家理解STM32 MCU的软硬件资源来帮助开发者快速高效地入门智能硬件开发。
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by查看: 3268|回复: 4
求教STM32串口2波特率问题
主题帖子精华
中级会员, 积分 227, 距离下一级还需 273 积分
在线时间20 小时
void uart2_init(u32 pclk1,u32 bound)
& & //GPIO端口设置
& & GPIO_InitTypeDef GPIO_InitS
USART_InitTypeDef USART_InitS
NVIC_InitTypeDef NVIC_InitS
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //使能USART2,GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
& USART_DeInit(USART2); &//复位串口2
//USART2_TX & PA.2
& & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
& & GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
& & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
& & GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA2
& & //USART2_RX
& & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
& & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
& & GPIO_Init(GPIOA, &GPIO_InitStructure); &//初始化PA3
& &//Usart2 NVIC 配置
& & NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
//子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
& &//USART 初始化设置
USART_InitStructure.USART_BaudRate = (pclk1 * 1000000) / (bound);//设置波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_N//无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
& & USART_Init(USART2, &USART_InitStructure); //初始化串口
& & USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断
& & USART_Cmd(USART2, ENABLE); & & & & & & & & & &//使能串口&
我用战舰的程序修改了下,用串口2来做通信,结果发现运行的时候
uart2_init(36,115200);
波特率在19200以内的时候发送的数据正常打印
当程序设定波特率大于19200的时候,打印就出现乱码,只有在串口调试助手把波特率调为19200以内的才能打印正常
不知道这个是什么原因,是不是STM32F103的串口2最高只能设为19200了?
求各位大神指导。
寄存器版本代码,115200测试没压力.
[mw_shl_code=c,true]#include "delay.h"
#include "usart2.h"
#include "stdarg.h"
#include "stdio.h"
#include "string.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32开发板
//串口2驱动代码
//正点原子@ALIENTEK
//技术论坛:www.open ...
主题帖子精华
金钱104745
在线时间653 小时
寄存器版本代码,115200测试没压力.
[C] 纯文本查看 复制代码#include \"delay.h\"
#include \"usart2.h\"
#include \"stdarg.h\"
#include \"stdio.h\"
#include \"string.h\"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32开发板
//串口2驱动代码
//正点原子@ALIENTEK
//技术论坛:
//修改日期:
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//串口发送缓存区
__align(8) u8 USART2_TX_BUF[USART2_MAX_SEND_LEN];
//发送缓冲,最大USART2_MAX_SEND_LEN字节
#ifdef USART2_RX_EN
//如果使能了接收
//串口接收缓存区
u8 USART2_RX_BUF[USART2_MAX_RECV_LEN];
//接收缓冲,最大USART2_MAX_RECV_LEN个字节.
//通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据.
//如果2个字符接收间隔超过10ms,则认为不是1次连续数据.也就是超过10ms没有接收到
//任何数据,则表示此次接收完毕.
//接收到的数据状态
//[15]:0,没有接收到数据;1,接收到了一批数据.
//[14:0]:接收到的数据长度
u16 USART2_RX_STA=0;
void USART2_IRQHandler(void)
if(USART2-&SR&(1&&5))//接收到数据
res=USART2-&DR;
if(USART2_RX_STA&USART2_MAX_RECV_LEN)
//还可以接收数据
TIM4-&CNT=0;
//计数器清空
if(USART2_RX_STA==0)TIM4_Set(1);
//使能定时器4的中断
USART2_RX_BUF[USART2_RX_STA++]=
//记录接收到的值
USART2_RX_STA|=1&&15;
//强制标记接收完成
//初始化IO 串口2
//pclk1:PCLK1时钟频率(Mhz)
//bound:波特率
void USART2_Init(u32 pclk1,u32 bound)
RCC-&APB2ENR|=1&&2;
//使能PORTA口时钟
GPIOA-&CRL&=0XFFFF00FF; //IO状态设置
GPIOA-&CRL|=0X00008B00; //IO状态设置
RCC-&APB1ENR|=1&&17;
//使能串口时钟
RCC-&APB1RSTR|=1&&17;
//复位串口2
RCC-&APB1RSTR&=~(1&&17);//停止复位
//波特率设置
USART2-&BRR=(pclk1*1000000)/(bound);// 波特率设置
USART2-&CR1|=0X200C;
//1位停止,无校验位.
USART2-&CR3=1&&7;
//使能串口2的DMA发送
UART_DMA_Config(DMA1_Channel7,(u32)&USART2-&DR,(u32)USART2_TX_BUF);//DMA1通道7,外设为串口2,存储器为USART2_TX_BUF
#ifdef USART2_RX_EN
//如果使能了接收
//使能接收中断
USART2-&CR1|=1&&8;
//PE中断使能
USART2-&CR1|=1&&5;
//接收缓冲区非空中断使能
MY_NVIC_Init(2,3,USART2_IRQn,2);//组2,最低优先级
TIM4_Init(99,7199);
//10ms中断
USART2_RX_STA=0;
TIM4_Set(0);
//关闭定时器4
//串口2,printf 函数
//确保一次发送数据不超过USART2_MAX_SEND_LEN字节
void u2_printf(char* fmt,...)
va_start(ap,fmt);
vsprintf((char*)USART2_TX_BUF,fmt,ap);
va_end(ap);
while(DMA1_Channel7-&CNDTR!=0); //等待通道7传输完成
UART_DMA_Enable(DMA1_Channel7,strlen((const char*)USART2_TX_BUF));
//通过dma发送出去
//定时器4中断服务程序
void TIM4_IRQHandler(void)
if(TIM4-&SR&0X01)//是更新中断
USART2_RX_STA|=1&&15; //标记接收完成
TIM4-&SR&=~(1&&0);
//清除中断标志位
TIM4_Set(0);
//关闭TIM4
//设置TIM4的开关
//sta:0,关闭;1,开启;
void TIM4_Set(u8 sta)
TIM4-&CNT=0;
//计数器清空
TIM4-&CR1|=1&&0;
//使能定时器4
}else TIM4-&CR1&=~(1&&0);//关闭定时器4
//通用定时器中断初始化
//这里始终选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
void TIM4_Init(u16 arr,u16 psc)
RCC-&APB1ENR|=1&&2; //TIM4时钟使能
TIM4-&ARR=
//设定计数器自动重装值
TIM4-&PSC=
//预分频器
TIM4-&DIER|=1&&0;
//允许更新中断
TIM4-&CR1|=0x01;
//使能定时器4
MY_NVIC_Init(1,3,TIM4_IRQn,2);//抢占2,子优先级3,组2 在2中优先级最低
///////////////////////////////////////USART2 DMA发送配置部分//////////////////////////////////
//DMA1的各通道配置
//这里的传输形式是固定的,这点要根据不同的情况来修改
//从存储器-&外设模式/8位数据宽度/存储器增量模式
//DMA_CHx:DMA通道CHx
//cpar:外设地址
//cmar:存储器地址
void UART_DMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar)
RCC-&AHBENR|=1&&0;
//开启DMA1时钟
delay_us(5);
DMA_CHx-&CPAR=
//DMA1 外设地址
DMA_CHx-&CMAR=
//DMA1,存储器地址
DMA_CHx-&CCR=0X; //复位
DMA_CHx-&CCR|=1&&4;
//从存储器读
DMA_CHx-&CCR|=0&&5;
//普通模式
DMA_CHx-&CCR|=0&&6;
//外设地址非增量模式
DMA_CHx-&CCR|=1&&7;
//存储器增量模式
DMA_CHx-&CCR|=0&&8;
//外设数据宽度为8位
DMA_CHx-&CCR|=0&&10;
//存储器数据宽度8位
DMA_CHx-&CCR|=1&&12;
//中等优先级
DMA_CHx-&CCR|=0&&14;
//非存储器到存储器模式
//开启一次DMA传输
void UART_DMA_Enable(DMA_Channel_TypeDef*DMA_CHx,u8 len)
DMA_CHx-&CCR&=~(1&&0);
//关闭DMA传输
DMA_CHx-&CNDTR=
//DMA1,传输数据量
DMA_CHx-&CCR|=1&&0;
//开启DMA传输
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
中级会员, 积分 227, 距离下一级还需 273 积分
在线时间20 小时
回复【2楼】正点原子:
---------------------------------
真是奇怪了,我用的是别人的STM32F103VET6板子,用您的这个程序进去串口2还是一样的只能到达19200波特率
主题帖子精华
金钱104745
在线时间653 小时
回复【3楼】xiaosi204:
---------------------------------
那是你板子的问题了吧...
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
初级会员, 积分 190, 距离下一级还需 10 积分
在线时间11 小时
回复【3楼】xiaosi204:
---------------------------------
库函数版本,测试&发现一样,19200&通信&无压力正常,。大于19200&就会出现&乱码。115200&干脆&严重不良。。
&&兄台&解决的怎么样了,,
Powered by

我要回帖

更多关于 内存频率 的文章

 

随机推荐