专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
定时器,dma,adc
2019-07-21 00:26
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
1230
3
1671
请问各位大神有没有用定时器控制ad转换,并且用dma
传输的?用寄存器版本编写的程序,谢谢了
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
mzwhhwj
2019-07-21 02:51
[mw_shl_code=c,true] [mw_shl_code=c,true]__IO uint16_t adc_Value[320]; void TIM3_PWM_Init(u32 arr,u32 psc) { //此部分需手动修改IO口设置 RCC->APB1ENR|=1<<1; //TIM3时钟使能 TIM3->ARR=arr; //设定计数器自动重装值 TIM3->
SC=psc; //预分频器不分频 TIM3->CCMR1|=6<<4; //CH1 PWM1模式 TIM3->CCMR1|=1<<3; //CH1 预装载使能 TIM3->CCER|=1<<0; //OC1 输出使能 TIM3->CCER|=1<<1; //OC1 低电平有效 TIM3->CCER|=1<<1; //OC1 低电平有效 TIM3->CCR1 =arr/2; //ARPE使能 TIM3->CR1|=1<<0; //使能定时器3 } void ADC_DMA_init(void) { RCC->AHB1ENR|=1<<22;//DMA2时钟使能 DMA2_Stream4->
AR=(u32)&(ADC1->DR); //DMA外设地址 DMA2_Stream4->M0AR=(u32)adc_Value; //DMA 存储器0地址 DMA2_Stream4->NDTR=320; //DMA 存储器0地址 DMA2_Stream4->CR=0; //先全部复位CR寄存器值 DMA2_Stream4->CR|=0<<6; //存储器到外设模式 DMA2_Stream4->CR|=1<<8; //循环模式 DMA2_Stream4->CR|=0<<9; //外设非增量模式 DMA2_Stream4->CR|=1<<10; //存储器增量模式 DMA2_Stream4->CR|=1<<11; //外设数据长度:16位 DMA2_Stream4->CR|=1<<13; //存储器数据长度:16位 DMA2_Stream4->CR|=1<<16; //中等优先级 DMA2_Stream4->CR|=0<<21; //外设突发单次传输 DMA2_Stream4->CR|=0<<23; //存储器突发单次传输 DMA2_Stream4->CR|= 0x0<<25;//通道选择 DMA2_Stream4->CR|= 1<< 0;//开DMA } //初始化ADC //这里我们仅以规则通道为例 void Adc_Init(void) { //先初始化IO口 RCC->APB2ENR|=1<<8; //使能ADC1时钟 RCC->AHB1ENR|=1<<0; //使能PORTA时钟 GPIO_Set(GPIOA,PIN6,GPIO_MODE_AIN,0,0,GPIO_PUPD_PU); //PA6,模拟输入,下拉 RCC->APB2RSTR|=1<<8; //ADCs复位 RCC->APB2RSTR&=~(1<<8); //复位结束 ADC->CCR=1<<16; //ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz ADC1->CR1=0; //CR1设置清零 ADC1->CR2=0; //CR2设置清零 ADC1->CR1|=0<<24; //12位模式 ADC1->CR1|=0<<8; //非扫描模式 ADC1->CR2&=~(1<<1); //单次转换模式 ADC1->CR2&=~(1<<11); //右对齐 ADC1->CR2 |= 3<<28; //硬件触发,上升沿下降沿都触发 ADC1->CR2 |=7<<24; //TIM3 通道1触发 ADC1->CR2 |= 1 << 8; //开DMA ADC1->SQR1&=~(0XF<<20); ADC1->SQR1|=0<<20; //1个转换在规则序列中 也就是只转换规则序列1 //设置通道6的采样时间 ADC1->SMPR2&=~(7<<(3*6)); //通道6采样时间清空 ADC1->SMPR2|=0<<(3*6); //通道6 480个周期,提高采样时间可以提高精确度 ADC1->SQR3|=0x6; ADC1->CR2 |= ADC_CR2_DDS; //必须置位才会一直循环采样,否则只能采样DMA设置值的次数 ADC1->CR2|=1<<0; //开启AD转换器 ADC_DMA_init(); TIM3_PWM_Init(1000,168-1); } [/mw_shl_code]
[/mw_shl_code]
加载中...
查看其它3个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
[/mw_shl_code]
一周热门 更多>