版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Stm32F407IG内部温度传感器测试(CORTEX-M4+ADC+DMA)刚才发了ADC的一般用法,得知stm32内部内置了一个温度传感器,于是趁热调试了一下内部温度传感器。没有软件滤波,正如手册里所说的,该温度传感器起到一个检测温度变化的作用,如果你想要精确的温度测量,请你外置测温元件.呵呵,测试结果如图:代码如下:/*Copyright(C),FileName:2012-2022,yin.main.cAuthor:Date:Description:小枣年糕20120501ADC1DMAtempersensorprintfVersion:IDE:HardWare:V3.0MDK4.22a
2、stm32F407IGHSE=25MPLL=168MHistory:V1.0Function:利用ADC读取芯片内部温度传感器的值*#include#include/定义ADC1的数据寄存器地址,DMA功能要用到外设的数据地址*ADC1的数据地址为外设基地址+偏移地址,基地址在RM0090Reference*manual(参考手册)的地址映射表里,为0 x40012000,ADC_DR*偏移地址为0 x4C,故实际地址为0 x40012000+0 x4C=0 x4001204C*/#defineADC1_DR_Addr(uint32_t)0 x4001204C)_IOuint16_tADCov
3、erValue;_IOfloatTemper;voidGPIO_Config(void);voidADC_Config(void);voidUSART_Config(void);voidDMA_Config(void);voidNVIC_Config(void);voidDelay(uint32_tnCount);/*printf函数重定向*/intfputc(intch,FILE*f);main()/*在主函数main之前通过调用启动代码运行了Systemlnit函数,而这个函数位于system_stm32f4xx.c”。程序运行起始于启动文件的第175行(LDRR0,=SystemInit
4、)。sys时钟为HSE频率/PLL_M*PLL_N/PLL_P,定义HSE为25M,则sys时钟频率为168M*/GPIO_Config();ADC_Config();USART_Config();DMA_Config();NVIC_Config();GPIO_SetBits(GPIOG,GPIO_Pin_6);/关闭LEDADC_SoftwareStartConv(ADC1);/如果不是外部触发则必须软件开始转换while(1)Delay(0 x0ffffff);/printf(sizeofintis%dn,sizeof(int);/测试可知32位系统的int占4个字节/printf(siz
5、eofADCoverValueis%dn,sizeof(ADCoverValue);Temper=(ADCoverValue*3300/4096-760)/2.5+25;printf(ADCoverVaule=%04XTemper=%.2fCn,ADCoverValue,Temper);/串口输出温度值/*因为DMA工作是独立于CPU之外的,所以在DMA工作的同时CPU可以做其他事*/*Function:voidGPIO_Config(void)Description:GPIO配置函数Input:无Output:无Return:无*/voidGPIO_Config(void)GPIO_Init
6、TypeDefGPIO_InitStructure;/*使能GPIOCGPIOFGPIOG时钟*/RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOG|RCC_AHB1Periph_GPIOF,ENABLE);GPIO_StructInit(&GPIO_InitStructure);/*初始化GPIOG的Pin_6为LED输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;/指定第六引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;/模式为输出G
7、PIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/频率为快速GPIO_lnit(GPIOG,&GPIO_lnitStructure);调用IO初始化函数/*配置GPIOC_Pin6为TX输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;/设置为复用,必须为AF,OUT不行GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure
8、);/*配置GPIOC_Pin7为RX输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;GPIO_lnitStructure.GPIO_Mode=GPIO_Mode_AF;这也必须为复用,与M3不同!GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);/*GPIO引脚复用功能设置*/GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_USART6);这相当于M3的开启复用时钟,只配置复用的引脚,GPIO
9、_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_USART6);/*Function:voidADC_Config(void)Description:ADC配置函数Input:无Output:无Return:无*/voidADC_Config(void)ADC_InitTypeDefADC_InitStructure;ADC_CommonInitTypeDefADC_CommonInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);开ADC1时钟ADC_DeInit();ADC_I
10、nitStructure.ADC_Resolution=ADC_Resolution_12b;/精度为12位ADC_InitStructure.ADC_ScanConvMode=DISABLE;/扫描转换模式失能ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;/连续转换使能ADC_InitStructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;/不用外部触发,软件触发转换ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalT
11、rigConv_T1_CC1;ADC_lnitStructure.ADC_DataAlign=ADC_DataAlign_Right;数据右对齐,低字节对齐ADC_lnitStructure.ADC_NbrOfConversion=1;/规定了顺序进行规则转换的ADC通道的数目ADC_lnit(ADC1,&ADC_lnitStructure);ADC_CommonlnitStructure.ADC_Mode=ADC_Mode_lndependent;/独立模式ADC_CommonlnitStructure.ADC_Prescaler=ADC_Prescaler_Div4;/分频为4,f(ADC
12、)=21MADC_CommonlnitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled;/失能DMA_MODEADC_CommonlnitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_20Cycles;两次采样间隔20个周期ADC_Commonlnit(&ADC_CommonlnitStructure);ADC_RegularChannelConfig(ADC1,ADC_Channel_16,1,ADC_SampleTime_480Cycles);规则通道配置,1表示规则组采样
13、顺序ADC_TempSensorVrefintCmd(ENABLE);使能温度传感器的基准电源ADC_Cmd(ADC1,ENABLE);使能ADC1ADC_DMACmd(ADC1,ENABLE);使能ADC1的DMAADC_DMARequestAfterLastTransferCmd(ADC1,ENABLE);/单通道模式下上次转换完成后DMA请求允许,也就是持续DMA/*Function:voidUSART_Config(void)Description:USART配置函数lnput:无Output:无Return:无*/voidUSART_Config(void)USART_lnitTyp
14、eDefUSART_lnitStructure;USART_ClocklnitTypeDefUSART_ClocklnitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6,ENABLE);/开启USART6时钟/*配置USART6*/USART_Structlnit(&USART_lnitStructure);USART_lnitStructure.USART_BaudRate=115200;USART_lnitStructure.USART_WordLength=USART_WordLength_8b;USART_lnitStructur
15、e.USART_StopBits=USART_StopBits_1;USART_lnitStructure.USART_Parity=USART_Parity_No;USART_lnitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_lnitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_lnit(USART6,&USART_lnitStructure);USART_ClockStructlnit(&USART_ClocklnitStr
16、uct);/之前没有填入缺省值,是不行的/使能USART6中断/使能USART6USART_Clocklnit(USART6,&USART_ClocklnitStruct);USART_lTConfig(USART6,USART_lT_RXNE,ENABLE);USART_Cmd(USART6,ENABLE);/*Function:voidNVlC_Config()Description:NVlC配置函数lnput:无Output:无Return:无*/voidNVlC_Config()/*USART6中断配置*/NVlC_lnitTypeDefNVlC_lnitStructure;NVlC_
17、PriorityGroupConfig(NVlC_PriorityGroup_1);NVlC_lnitStructure.NVlC_lRQChannel=USART6_lRQn;/嵌套优先级分组为1嵌套通道为USART6_IRQnNVlC_lnitStructure.NVlC_lRQChannelPreemptionPriority=0;/抢占优先级为0NVlC_lnitStructure.NVlC_lRQChannelSubPriority=0;NVlC_lnitStructure.NVlC_lRQChannelCmd=ENABLE;/响应优先级为0/通道中断使能NVlC_lnit(&NVl
18、C_lnitStructure);/*DMA中断配置*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/嵌套优先级分组为1/响应优先级为0/通道中断使能NVIC_InitStructure.NVIC_IRQChannel=DMA2_Stream0_IRQn;/嵌套通道为DMA2_Stream0_IRQnNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;/抢占优先级为1NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_InitStru
19、cture.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);/嵌套优先级分组为1/嵌套通道为ADC_IRQn/*ADC中断配置*/NVlC_PriorityGroupConfig(NVlC_PriorityGroup_1);NVlC_lnitStructure.NVlC_lRQChannel=ADC_lRQn;/响应优先级为2/通道中断使能NVlC_lnitStructure.NVlC_lRQChannelPreemptionPriority=1;/抢占优先级为1NVlC_lnitStructure.NVlC_lRQChanne
20、lSubPriority=2;NVlC_lnitStructure.NVlC_lRQChannelCmd=ENABLE;NVlC_lnit(&NVlC_lnitStructure);/*Function:voidDMA_Config(void)Description:DMA配置函数Input:延时的时间Output:无Return:无*/voidDMA_Config(void)DMA_lnitTypeDefDMA_lnitStructure;/*首先开DMA2时钟,由407参考手册-RM0090-Referencemanual*165页可知,ADC与DMA2映射,而且DMA2挂载在AHB1时钟
21、总线上*/RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);DMA_DeInit(DMA2_Stream0);DMA_StructInit(&DMA_InitStructure);DMA_lnitStructure.DMA_Channel=DMA_Channel_O;选择Channel_0DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)ADC1_DR_Addr;/数据传输的外设首地址,详解见上DMA_lnitStructure.DMA_MemoryOBaseAddr=(uint32_t)&
22、ADCoverValue;/自己定义待发送数组的首地址,要强制转换为32位DMA_lnitStructure.DMA_DlR=DMA_DlR_PeripheralToMemory;/数据传输方向选择为内存-外设DMA_lnitStructure.DMA_BufferSize=1;/传输数据大小为16,单位由以下确定,大小要配合定义的数组类型和外设数据类型DMA_lnitStructure.DMA_Peripherallnc=DMA_Peripherallnc_Disable;外设地址寄存器自动增加禁止,因为这里只用到了DR数据寄存器DMA_lnitStructure.DMA_Memorylnc
23、=DMA_Memorylnc_Disable;/内存地址自增不允许,因为只存取一个数DMA_lnitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;/外设的数据大小,因为USART6_DR数据寄存器为8为,故选Byte/DMA传输模式为Normal,如果为Circular,将会循环传输/优先级为VeryHighDMA_lnitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;/这里也选ByteDMA_lnitStructure.DMA_Mode=DMA_Mode_Circular;DMA_lnitStructure.DMA_Priority=DMA_Priority_High;DMA_lnit(DMA2_Stream0,&DMA_lnitStructure);/使能DMA2_Stream0通道DMA_Cmd(DMA2_Stream0,ENABLE);/*DMA中断开*/DMA_lTConfig(DMA2_Stream0,DMA_lT_TC,ENABLE);/*Fun
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山东泰安重点中学初三5月校际联合期中考试生物试题试卷含解析
- 2026年发展中国家农业AI应用场景与市场机会
- 2026年老年友好型社区 城市建设标准与全龄友好环境营造指南
- 2026年社区嵌入式养老设施适老化设计导则
- 2025年临床医学模拟测试卷
- 长河大桥建设项目年度计划解析
- 新零售领域市场营销负责人全解手册
- 操作系统优化关键步骤概述
- 教育信息化实践:学校网络规划师面试指南
- 航空电子设备调试技术员经验
- MOOC 算法设计与分析-武汉理工大学 中国大学慕课答案
- 《电工电子技术》课程整体教学设计
- 《高甘油三酯血症》课件
- 【教学创新大赛】教学创新成果报告汇编(8篇)
- 公路工程监理工作程序及质量控制
- 蒙台梭利教学法PPT完整全套教学课件
- 小型红薯粉打捆机的设计17
- 企业安全生产托管工作服务手册
- 2023年新版八年级生物竞赛试题
- 尿动力学检查操作指南2023版
- 开工第一课(课件)
评论
0/150
提交评论