F373系列,怎么使用自动配置脚本HAL库配置SDADC

STM32F1入门福利贴:基于HAL库/CubeMX软件的软硬件设计手册(更新完结) - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
Hot [精品]
STM32F1入门福利贴:基于HAL库/CubeMX软件的软硬件设计手册(更新完结)
09:20:31  
13763&查看
本帖最后由 亼亽 于
09:43 编辑
STM32入门学习选择使用HAL库代替原本的标准固件库已经是板上钉钉的事了,
不然你就out了,当你辛辛苦苦学习完标准固件库之后,发现大家都在用HAL库
了。STM32CubeMX可以提供的方便还是显而易见的。
苦于网上目前还没有体系的、详细的、易理解的基于HAL库教程文档使得新人学
习非常痛苦,现在福利已经到来,基于HAL库的教程文档已经出来了,实际上在
之前到现在就是以后我们一直都在更新基于HAL库的例程(本论坛系列帖子:
【HAL库每天一例】),文档+例程,使得你学习HAL库不再烦恼
本文档是配套“【HAL库每天一例】”系列例程进行详细讲解。
经过几个月的奋斗努力,本文档已经编写完结,暂告一段落了,文档总共39章内
容—614页,欢迎各位坛友下载阅读。。。文档中部分内容是硬石团队完全自主
编写,个人觉得还是非常不错的,当然也有部分内容是参考广大网友的智慧,在
这里向他们致敬!最后希望各位坛友在阅读本文档后可以指出文档不足地方并提
出建议,谢谢了。
关于文档更新问题:文档现在更新告一段路,因为个人觉得文档内容已经足够新
手STM32入门了。除非,有很多坛友提出必须增加部分知识点内容,我们会在
后面考虑增加对应的内容。。。
硬石YS-F1Pro开发板开发手册
基于HAL库的STM32入门系列教程
前言图片.jpg (69.34 KB, 下载次数: 2)
08:58 上传
文档及配套例程下载:
资料包括程序、相关说明资料以及软件使用截图
百度云盘:/s/1slN8rIt 密码:u6m1360云盘:/OcPiRp3wEcA92u密码 cfb6
更新记录:
& && && && & 更新至第8章
第1章 YS-F1Pro开发板硬件设计
第2章 YS-F1Pro开发板原理图详解
第3章& & 3.5寸液晶模组电路设计
第4章& & HAL库介绍
第5章& & STM32CubeMX安装及使用
第7章& & 寄存器
第8章& & Cortex-M3内核
编辑原因:更新例程下载链接
您的帖子很精彩,期待您分享的下一个帖子!.
16:56:43  
& && && && && & 至第37章
第36章& &CAN-双机通信测试
第37章& &RS-485通信
百度云盘:/s/1slN8rIt& &密码:u6m1
360云盘:/OcPiRp3wEcA92u&&密码 cfb6
09:44:20  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
& && && && && & 至第39章
第38章& &以太网-W5500
第39章& &WIFI-ESP8266
文档及配套例程下载:
资料包括程序、相关说明资料以及软件使用截图
百度云盘:/s/1slN8rIt 密码:u6m1
360云盘:/OcPiRp3wEcA92u密码 cfb6
14:00:10  
& && && && && & 至第9章
第9章& & GPIO—流水灯
& && && && && & 至第11章
第10章& & 工程文件结构和复位启动
第11章&&GPIO—按键输入扫描
& && && && && & 至第17章
第12章& &EXTI—按键中断输入
第13章& &USART—RS-232串口通信
第14章& &USART-指令控制
第15章& &DMA—直接内存访问
第16章& &DMA- USART1接发
第17章& &SysTick—系统滴答定时器
15:30:20  
& && && && && & 至第19章
第18章& &TIM—基本定时器
第19章& &TIM-高级控制定时器
09:21:09  
& && && && && & 至第21章
第20章& &TIM—通用定时器(电容按键)
第21章& &TIM—通用定时器( 呼吸灯)
09:24:38  
& && && && && & 至第23章
第22章& &ADC—电压采集
第23章& &DAC—电压输出
10:44:49  
& && && && && & 至第26章
第24章& &LCD-液晶显示
第25章& &LCD显示中英文(字模在内部FLASH)
第26章& &FSMC-外部SRAM实验
11:36:03  
& && && && && & 至第28章
第27章& &SDIO-SD卡
第28章& &SDIO-基于SD卡的FATFS文件系统
文档及配套例程下载:
资料包括程序、相关说明资料以及软件使用截图
百度云链接:
密码:r3s3
16:02:03  
本帖最后由 亼亽 于
10:31 编辑
& && && && && & 至第31章
第29章& &SPI-串行Flash
第30章& &SPI-基于串行Flash的FatFS文件系统
第31章& &I2C-EEPROM
百度云盘:/s/1slN8rIt 密码:u6m1
360云盘:/OcPiRp3wEcA92u密码 cfb6
13:04:40  
& && && && && & 至第35章
第32章& &LCD-显示汉字(字库在SD卡)
第33章& &LCD-显示汉字(字库在串行Flash)
第34章& &LCD-显示图片(图片在SD卡)
第35章& &LCD-触摸画笔
09:31:41  
感谢分享,正在学习HAL库。
13:51:04  
感谢分享,谢谢楼主
16:08:24  
谢谢楼主的分享,感谢有你。
08:15:23  
顶楼主。。。谢谢学习了!
16:03:21  
很感谢,真的很感谢,看到HAL乱七八糟,想找什么东西都找不到。
助理工程师
17:03:47  
感谢 这么详细的资料!!
20:51:26  
赞赞赞,非常赞
助理工程师
09:32:40  
感谢楼主的分享,非常好的资料,正在学习
16:42:07  
非常感谢楼主,学习
工程师职场
Powered by
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
版权所有 (C) 深圳华强聚丰电子科技有限公司查看: 3507|回复: 10
请教关于SDADC+DMA的问题
主题帖子精华
初级会员, 积分 86, 距离下一级还需 114 积分
在线时间8 小时
平台:STM32F373
我用SDADC+DMA采集外部电压,采集到的数值特别小。如果配置为SDADC+中断读取数值的方式,数值就正常。
请教高手可能的原因?
1eb14ecb8ec58aa39043df_24.jpg (0 Bytes, 下载次数: 0)
22:54 上传
SDADC+DMA,采集多个数据,数值特别小
e459492ebbbbff183ff0_227.jpg (0 Bytes, 下载次数: 0)
22:54 上传
用SDADC中断的方式,采集到的数据是正常的。
请教高手这个问题可能的原因!
不好意思。打扰了。
问题解决。
DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_MemoryDataSize_W&//这句跑偏了。
主题帖子精华
初级会员, 积分 86, 距离下一级还需 114 积分
在线时间8 小时
不好意思。打扰了。
问题解决。
DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_MemoryDataSize_W&//这句跑偏了。
主题帖子精华
初级会员, 积分 86, 距离下一级还需 114 积分
在线时间8 小时
代码基本参考自ST的官方固件
uint32_t&SDADC1_Config(void)
{
&&SDADC_AINStructTypeDef&SDADC_AINS
&&GPIO_InitTypeDef&&&GPIO_InitS
&&NVIC_InitTypeDef&NVIC_InitS
&&uint32_t&SDADCTimeout&=&0;
&&
&&/*&MPX2102_SDADC&APB2&interface&clock&enable&*/
&&RCC_APB2PeriphClockCmd(MPX2102_SDADC_CLK,&ENABLE);
&&/*&nbspWR&APB1&interface&clock&enable&*/
&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,&ENABLE);
&&/*&Enable&MPX2102_SDADC&analog&interface&*/
&&nbspWR_SDADCAnalogCmd(MPX2102_SDADC_PWR,&ENABLE);
&&/*&Set&the&SDADC&divider:&The&SDADC&should&run&@6MHz&*/
&&/*&If&Sysclk&is&72MHz,&SDADC&divider&should&be&12&*/
&&RCC_SDADCCLKConfig(RCC_SDADCCLK_SYSCLK_Div12);
&&/*&GPIOE&nbsperipheral&clock&enable&*/
&&RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,&ENABLE);
&&/*&MPX2102_SDADC&channel&8P&(PE8)&&and&channel&8N&(PE9)&*/
&&GPIO_InitStructure.GPIO_Mode&&=&GPIO_Mode_AN;
&&GPIO_InitStructure.GPIO_PuPd&=&GPIO_PuPd_NOPULL;
&&GPIO_InitStructure.GPIO_Pin&&&=&MPX2102_GPIO_PIN_P&|&MPX2102_GPIO_PIN_N;
&&GPIO_Init(MPX2102_SDADC_GPIO_PORT,&&GPIO_InitStructure);
&&/*&Select&External&reference:&The&reference&voltage&selection&is&available
&&&&&only&in&SDADC1&and&therefore&to&select&the&VREF&for&SDADC2/SDADC3,&SDADC1
&&&&&clock&must&be&already&enabled&*/
&&SDADC_VREFSelect(MPX2102_SDADC_VREF);
&&/*&Insert&delay&equal&to&~5&ms&*/
&&Delay(5000);
&&
&&/*&Enable&MPX2102_SDADC&*/
&&SDADC_Cmd(MPX2102_SDADC,&ENABLE);
&&/*&Enter&initialization&mode&*/
&&SDADC_InitModeCmd(MPX2102_SDADC,&ENABLE);
&&SDADCTimeout&=&SDADC_INIT_TIMEOUT;
&&/*&wait&for&INITRDY&flag&to&be&set&*/
&&while((SDADC_GetFlagStatus(MPX2102_SDADC,&SDADC_FLAG_INITRDY)&==&RESET)&&&&(--SDADCTimeout&!=&0));
&&if(SDADCTimeout&==&0)
&&{
&&&&/*&INITRDY&flag&is&not&set&*/
&&&&return&1;
&&}
&&/*&Analog&Input&configuration&conf0:&use&differential&mode&and&gain&=&4&*/
&&SDADC_AINStructure.SDADC_InputMode&=&SDADC_InputMode_D
&&SDADC_AINStructure.SDADC_Gain&=&MPX2102_SDADC_GAIN;
&&SDADC_AINStructure.SDADC_CommonMode&=&SDADC_CommonMode_VSSA;
&&SDADC_AINStructure.SDADC_Offset&=&0;
&&SDADC_AINInit(MPX2102_SDADC,&SDADC_Conf_0,&&SDADC_AINStructure);
&&/*&select&MPX2102_SDADC&channel&8&to&use&conf0&*/
&&SDADC_ChannelConfig(MPX2102_SDADC,&MPX2102_SDADC_CHANNEL,&SDADC_Conf_0);
&&/*&select&channel&8&*/
&&SDADC_InjectedChannelSelect(MPX2102_SDADC,&MPX2102_SDADC_CHANNEL);
&&/*&Select&an&external&trigger&*/
&&SDADC_ExternalTrigInjectedConvConfig(MPX2102_SDADC,&SDADC_ExternalTrigInjecConv_T19_CC2);
&&/*&Select&rising&edge&*/
&&SDADC_ExternalTrigInjectedConvEdgeConfig(MPX2102_SDADC,&SDADC_ExternalTrigInjecConvEdge_Rising);
&&/*&Exit&initialization&mode&*/
&&SDADC_InitModeCmd(MPX2102_SDADC,&DISABLE);
SDADC_DMAConfig(SDADC1,&SDADC_DMATransfer_Injected,&ENABLE);
&&/*&Enable&end&of&injected&conversion&interrupt&*/
//&&SDADC_ITConfig(MPX2102_SDADC,&SDADC_IT_JEOC,&ENABLE);
//&&/*&NVIC&Configuration&*/
//&&NVIC_InitStructure.NVIC_IRQChannel&=&SDADC1_IRQn;
//&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority&=&0;
//&&NVIC_InitStructure.NVIC_IRQChannelSubPriority&=&0;
//&&NVIC_InitStructure.NVIC_IRQChannelCmd&=&ENABLE;
//&&NVIC_Init(&NVIC_InitStructure);
&&/*&configure&calibration&to&be&performed&on&conf0&*/
&&SDADC_CalibrationSequenceConfig(MPX2102_SDADC,&SDADC_CalibrationSequence_1);
&&/*&start&MPX2102_SDADC&Calibration&*/
&&SDADC_StartCalibration(MPX2102_SDADC);
&&/*&Set&calibration&timeout:&5.12&ms&at&6&MHz&in&a&single&calibration&sequence&*/
&&SDADCTimeout&=&SDADC_CAL_TIMEOUT;
&&/*&wait&for&MPX2102_SDADC&Calibration&process&to&end&*/
&&while((SDADC_GetFlagStatus(MPX2102_SDADC,&SDADC_FLAG_EOCAL)&==&RESET)&&&&(--SDADCTimeout&!=&0));
&&if(SDADCTimeout&==&0)
&&{
&&&&/*&EOCAL&flag&can&not&set&*/
&&&&return&2;
&&}
&&return&0;
}
void&DMA2_Config(void)
{
DMA_InitTypeDef&DMA_InitS
NVIC_InitTypeDef&NVIC_InitS
/*&DMA2&clock&enable&*/
&&RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);
&&/*&DMA2&Channel3&Config&*/
&&DMA_DeInit(DMA2_Channel3);
&&DMA_InitStructure.DMA_PeripheralBaseAddr&=&(uint32_t)SDADC1_JDATAR;
&&DMA_InitStructure.DMA_MemoryBaseAddr&=&(uint32_t)InjectedConvD
&&DMA_InitStructure.DMA_DIR&=&DMA_DIR_PeripheralSRC;
&&DMA_InitStructure.DMA_BufferSize&=&ADCConvertN
&&DMA_InitStructure.DMA_PeripheralInc&=&DMA_PeripheralInc_D
&&DMA_InitStructure.DMA_MemoryInc&=&DMA_MemoryInc_E
&&DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_MemoryDataSize_W
&&DMA_InitStructure.DMA_MemoryDataSize&=&DMA_MemoryDataSize_W
&&DMA_InitStructure.DMA_Mode&=&DMA_Mode_C
&&DMA_InitStructure.DMA_Priority&=&DMA_Priority_VeryH
&&DMA_InitStructure.DMA_M2M&=&DMA_M2M_D
&&DMA_Init(DMA2_Channel3,&&DMA_InitStructure);
&&/*&DMA2&Channel3&enable&*/
&&//DMA_ITConfig(DMA2_Channel3,&DMA_IT_TC,&DISABLE);
NVIC_InitStructure.NVIC_IRQChannel&=&DMA2_Channel3_IRQn;
&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority&=&4;
&NVIC_InitStructure.NVIC_IRQChannelSubPriority&=&0;
&NVIC_InitStructure.NVIC_IRQChannelCmd&=&ENABLE;
&NVIC_Init(&NVIC_InitStructure);
&DMA_ITConfig(DMA2_Channel3,&DMA_IT_TC,&ENABLE);
DMA_Cmd(DMA2_Channel3,&ENABLE);
主题帖子精华
初级会员, 积分 86, 距离下一级还需 114 积分
在线时间8 小时
&DMA_CCR3 寄存器的PSIZE位为0x00,也就是说是8bit数据。不知道为什么会这样?
952ef76b7ad8f7e1.jpg (0 Bytes, 下载次数: 0)
22:54 上传
主题帖子精华
金钱113176
在线时间827 小时
回复【4楼】txmsszd:
---------------------------------
谢谢分享
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 27, 距离下一级还需 23 积分
在线时间0 小时
回复【4楼】txmsszd:
---------------------------------
请问楼主,你这里说的是什么意思,跑偏?不能用Word吗?@txmsszd
主题帖子精华
初级会员, 积分 86, 距离下一级还需 114 积分
在线时间8 小时
回复【6楼】深枭:
---------------------------------
DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_MemoryDataSize_W&
这句把Memory的参数用在了peripheral了。应该是这样的
DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_PeripheralDataSize_W
主题帖子精华
新手上路, 积分 27, 距离下一级还需 23 积分
在线时间0 小时
回复【7楼】txmsszd:
---------------------------------
嗯,看了一下相应的定义,在CCR中,DMA_MemoryDataSize_Word是((uint32_t)0x),
DMA_PeripheralDataSize_Word是((uint32_t)0x),之前没注意看你的程序,故有此疑问。
主题帖子精华
初级会员, 积分 185, 距离下一级还需 15 积分
在线时间14 小时
楼主,你参考的固件库是STM32cubef3下的STM32373C_EVAL文件下的Examples下sdadc下的例程吗?我怎么看着这下面的例程调用的都是封装好的函数
主题帖子精华
新手上路, 积分 10, 距离下一级还需 40 积分
在线时间1 小时
自己编写的程序,SDADC使用的方式,集中不同的方式
主题帖子精华
新手上路, 积分 10, 距离下一级还需 40 积分
在线时间1 小时
可以在21ic网站上下载。
Powered by查看: 5137|回复: 2
STM32F373使用SDADC结合DMA采样电压,采样周期5120Hz(<16.6ksps),采集的数据偏大且波动大,大家来看看什么情况
主题帖子精华
新手上路, 积分 27, 距离下一级还需 23 积分
在线时间0 小时
使用SDADC1的差分输入模式。VREFSD+采用片内1.22V做参考电压,在VREFSD+和VREFSD-之间以1uF+10nF相连,VREFSD-接GND。
配置DMA,一次采样1024个点;定时器TIM19触发。基本情况就是这些。
下面通过测量直流0.5V说明问题:
应该测得的数据为(0.5/1.22)*2^16=26859,实测为下图所示
de64a89c0f00700bea1ef_41.png (0 Bytes, 下载次数: 0)
22:54 上传
这。。。。。。。。。。误差太大,而且波动也太剧烈了,根本不能做后续工作啊,怎么搞?
代码基本为库文件中所提供的例子,如下所示
》》》》》》注释部分略多,请自动忽略》》》》》》
希望大神帮忙解决疑惑啊!
[C] 纯文本查看 复制代码uint32_t SDADC1_Config(void)
SDADC_AINStructTypeDef SDADC_AINS
GPIO_InitTypeDef GPIO_InitS
DMA_InitTypeDef
NVIC_InitTypeDef NVIC_InitS
uint32_t SDADCTimeout = 0;
/* Enable DMA2 clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
/* ECG_SDADC APB2 interface clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDADC1 ,ENABLE);//| RCC_APB2Periph_SDADC2, ENABLE);
/* PWR APB1 interface clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Enable ECG_SDADC analog interface */
PWR_SDADCAnalogCmd(PWR_SDADCAnalog_1, ENABLE);
// PWR_SDADCAnalogCmd(PWR_SDADCAnalog_2, ENABLE);
// PWR_SDADCAnalogCmd(PWR_SDADCAnalog_3, ENABLE);
/* Set the SDADC divider: The SDADC should run @6MHz */
/* If Sysclk is 72MHz, SDADC divider should be 12 */
RCC_SDADCCLKConfig(RCC_SDADCCLK_SYSCLK_Div12);
/* GPIOE Peripheral clock enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);// | RCC_AHBPeriph_GPIOB, ENABLE);//8-20注释,发现错误,将GPIOA改为GPIOB,只要2路ADC的话,GPIOB也没用了
/* ECG_SDADC channel pin configuration: PE8,PE9,PE11,PE12*/
GPIO_InitStructure.GPIO_Mode
= GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin
= GPIO_Pin_8 | GPIO_Pin_9 ;//| GPIO_Pin_11 | GPIO_Pin_12;// | GPIO_Pin_13 | GPIO_Pin_14;//8-20注释
GPIO_Init(GPIOE, &GPIO_InitStructure);
// GPIO_InitStructure.GPIO_Pin
= GPIO_Pin_0 | GPIO_Pin_1;//8-20注释
// GPIO_Init(GPIOB, &GPIO_InitStructure);
DMA_StructInit(&DMA_InitStructure);
/* Config the DMA2 channel 3 */
DMA_DeInit(DMA2_Channel3);
DMA2_MEM_LEN=
DMA_InitStructure.DMA_PeripheralBaseAddr
= SDADC1_DR_A
DMA_InitStructure.DMA_MemoryBaseAddr
= (uint32_t)InjectedConvD
DMA_InitStructure.DMA_DIR
= DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize
= DMA2_MEM_LEN;
DMA_InitStructure.DMA_PeripheralInc
= DMA_PeripheralInc_D
DMA_InitStructure.DMA_MemoryInc
= DMA_MemoryInc_E
DMA_InitStructure.DMA_PeripheralDataSize
= DMA_PeripheralDataSize_W
DMA_InitStructure.DMA_MemoryDataSize
= DMA_MemoryDataSize_W
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);
/* Enable DMA2 Channel3 Transfer half and Complete interrupt */
DMA_ITConfig(DMA2_Channel3, DMA_IT_TC, ENABLE);
/* Enable DMA2 Channel3 */
DMA_Cmd(DMA2_Channel3, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
SDADC_DeInit(SDADC1);
// SDADC_DeInit(SDADC2);
/* Select External reference: The reference voltage selection is available
only in SDADC1 and therefore to select the VREF for SDADC2/SDADC3, SDADC1
clock must be already enabled */
SDADC_VREFSelect(POT_SDADC_VREF);
/* Insert delay equal to ~10 ms (4 ms required) */
delay_ms(5);
/* ENABLE ECGSDADC */
SDADC_Cmd(SDADC1, ENABLE);
// SDADC_Cmd(SDADC2, ENABLE);
/* Enter initialization mode */
SDADC_InitModeCmd(SDADC1, ENABLE);
// SDADC_InitModeCmd(SDADC2, ENABLE);
SDADCTimeout = SDADC_INIT_TIMEOUT;
/* wait for INITRDY flag to be set */
while((SDADC_GetFlagStatus(SDADC1, SDADC_FLAG_INITRDY) == RESET) && (--SDADCTimeout != 0));
if(SDADCTimeout == 0)
/* INITRDY flag can not set */
// SDADCTimeout = SDADC_INIT_TIMEOUT;
/* wait for INITRDY flag to be set */
while((SDADC_GetFlagStatus(SDADC2, SDADC_FLAG_INITRDY) == RESET) && (--SDADCTimeout != 0));
// if(SDADCTimeout == 0)
/* INITRDY flag can not set */
SDADC_AINStructure.SDADC_InputMode = SDADC_InputMode_D
SDADC_AINStructure.SDADC_Gain = POT_SDADC_GAIN;
SDADC_AINStructure.SDADC_CommonMode = SDADC_CommonMode_VSSA;
SDADC_AINStructure.SDADC_Offset = 0;
SDADC_AINInit(SDADC1, SDADC_Conf_0, &SDADC_AINStructure);
// SDADC_AINInit(SDADC2, SDADC_Conf_0, &SDADC_AINStructure);
/* select ECG_SDADC channel to use conf0 */
SDADC_ChannelConfig(SDADC1, SDADC_Channel_8, SDADC_Conf_0);
// SDADC_ChannelConfig(SDADC2, SDADC_Channel_4, SDADC_Conf_0);
/* select SDADC Channel */
SDADC_InjectedChannelSelect(SDADC1, SDADC_Channel_8 );
// SDADC_InjectedChannelSelect(SDADC2, SDADC_Channel_4 );
/* 3、4路SDADC configuration */
// SDADC_AINInit(SDADC1, SDADC_Conf_1, &SDADC_AINStructure);//8-20注释
// SDADC_AINInit(SDADC2, SDADC_Conf_1, &SDADC_AINStructure);
// SDADC_ChannelConfig(SDADC1, SDADC_Channel_6, SDADC_Conf_1);
// SDADC_ChannelConfig(SDADC2, SDADC_Channel_2, SDADC_Conf_1);
/* Select the SDADC injected channel */
SDADC1-&JCHGR |= (uint32_t) (SDADC_Channel_6 & 0x0000FFFF);//8-20注释
// SDADC2-&JCHGR |= (uint32_t) (SDADC_Channel_2 & 0x0000FFFF);
// SDADC_InjectedContinuousModeCmd(SDADC1,ENABLE);
// SDADC_InjectedContinuousModeCmd(SDADC2,ENABLE);
/* Select an external trigger */
SDADC_ExternalTrigInjectedConvConfig(SDADC1, SDADC_ExternalTrigInjecConv_T19_CC2);
/* Select rising edge */
SDADC_ExternalTrigInjectedConvEdgeConfig(SDADC1, SDADC_ExternalTrigInjecConvEdge_Rising);
/*JSYNC: Launch a injected conversion synchronously with SDADC1
0: Do not launch injected conversion synchronously with SDADC1
1: Launch an injected conversion in this SDADC at the same moment that an injected conversion is
launched in SDADC1
This bit can be modified only when INITRDY=1 (SDADC_ISR) or ADON=0 (SDADC_CR2).*/
// SDADC_InjectedSynchroSDADC1(SDADC2,ENABLE);
/* Enable DMA transfer for injected conversions */
SDADC_DMAConfig(SDADC1, SDADC_DMATransfer_Injected, ENABLE);
// SDADC_FastConversionCmd(SDADC1,ENABLE);
// SDADC_FastConversionCmd(SDADC2,ENABLE);
// /* configure calibration to be performed on conf0 */
SDADC_CalibrationSequenceConfig(SDADC1, SDADC_CalibrationSequence_1);
// /* configure calibration to be performed on conf0 */
SDADC_CalibrationSequenceConfig(SDADC2, SDADC_CalibrationSequence_1);
/* Exit initialization mode */
SDADC_InitModeCmd(SDADC1, DISABLE);
// SDADC_InitModeCmd(SDADC2, DISABLE);
///////////////////////////校准/////////////////////////////////////
/* configure calibration to be performed on conf0 */
SDADC_CalibrationSequenceConfig(SDADC1, SDADC_CalibrationSequence_2);
SDADC_CalibrationSequenceConfig(SDADC1, SDADC_CalibrationSequence_1);
/* start ECG_SDADC Calibration */
SDADC_StartCalibration(SDADC1);
/* Set calibration timeout: 5.12 ms at 6 MHz in a single calibration sequence */
SDADCTimeout = SDADC_CAL_TIMEOUT;
/* wait for ECG_SDADC Calibration process to end */
while(SDADC_GetFlagStatus(SDADC1, SDADC_FLAG_EOCAL) == RESET && (--SDADCTimeout != 0));
if(SDADCTimeout == 0)
/* EOCAL flag can not set */
// SDADC_SoftwareStartInjectedConv(SDADC1);
// ////////////////////////////校准////////////////////////////////////
/* configure calibration to be performed on conf0 */
SDADC_CalibrationSequenceConfig(SDADC2, SDADC_CalibrationSequence_2);
/* start ECG_SDADC Calibration */
SDADC_StartCalibration(SDADC2);
// /* Set calibration timeout: 5.12 ms at 6 MHz in a single calibration sequence */
SDADCTimeout = SDADC_CAL_TIMEOUT;
/* wait for ECG_SDADC Calibration process to end */
while(SDADC_GetFlagStatus(SDADC2, SDADC_FLAG_EOCAL) == RESET && (--SDADCTimeout != 0));
// if(SDADCTimeout == 0)
/* EOCAL flag can not set */
Configure timer TIM3: It is used as trigger for SDADC conversion
* @retval None
void TIM19_Config(void)
TIM_TimeBaseInitTypeDef
TIM_TimeBaseS
TIM_OCInitTypeDef
TIM_OCInitS
/* Enable TIM19 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM19, ENABLE);
TIM_DeInit(TIM19);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = SystemCoreClock/100/SAMPLING_FREQ-1;
//自动装载值72M/SAMPLING_FREQ,相当于得到定时器的频率为SAMPLING_FREQ
TIM_TimeBaseStructure.TIM_Prescaler = 99;
//预分频CK_CNT=fCK_PSC/(0+1)
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
TIM_TimeBaseInit(TIM19, &TIM_TimeBaseStructure);
/* Channel2 Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_D
TIM_OCInitStructure.TIM_Pulse = SystemCoreClock/100/SAMPLING_FREQ/2;
//保证从0向上计数时,在TIM_Period/2处产生一个上升沿,保证在定时器频率下,每个周期触发SDADC一次,触发频率为SAMPLING_FREQ
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H;
TIM_OC2Init(TIM19, &TIM_OCInitStructure);
// TIM_OC2Init(TIM3, &TIM_OCInitStructure);
// TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ITConfig(TIM3, TIM_IT_CC1 , ENABLE);
TIM_ARRPreloadConfig(TIM3, ENABLE);
/* TIM19 enable counter */
TIM_Cmd(TIM19, ENABLE);
主题帖子精华
金钱113176
在线时间827 小时
主题帖子精华
初级会员, 积分 185, 距离下一级还需 15 积分
在线时间14 小时
哥们,POT_SDADC_VREF的宏定义改了吗?官方例程对应的是外部参考电压
Powered by}

我要回帖

更多关于 使用自动配置脚本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信