STM内部温度传感器串口显示完整程序.docx

上传人:b****6 文档编号:4516657 上传时间:2022-12-01 格式:DOCX 页数:6 大小:28.88KB
下载 相关 举报
STM内部温度传感器串口显示完整程序.docx_第1页
第1页 / 共6页
STM内部温度传感器串口显示完整程序.docx_第2页
第2页 / 共6页
STM内部温度传感器串口显示完整程序.docx_第3页
第3页 / 共6页
STM内部温度传感器串口显示完整程序.docx_第4页
第4页 / 共6页
STM内部温度传感器串口显示完整程序.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

STM内部温度传感器串口显示完整程序.docx

《STM内部温度传感器串口显示完整程序.docx》由会员分享,可在线阅读,更多相关《STM内部温度传感器串口显示完整程序.docx(6页珍藏版)》请在冰豆网上搜索。

STM内部温度传感器串口显示完整程序.docx

STM内部温度传感器串口显示完整程序

Lastrevisiondate:

13December2020.

 

STM内部温度传感器串口显示完整程序

STM32F103内部温度传感器用串口传递到PC上显示

程序如下:

#include"stm32f10x.h"

#include"stm32_eval.h"

#include"stm32f10x_conf.h"

#include

#defineDR_ADDRESS((uint32_t)0x4001244C)//ADC1DR寄存器基地址

USART_InitTypeDefUSART_InitStructure;//串口初始化结构体声明

ADC_InitTypeDefADC_InitStructure;//ADC初始化结构体声明

DMA_InitTypeDefDMA_InitStructure;//DMA初始化结构体声明

__IOuint16_tADCConvertedValue;//在内存中声明一个可读可写变量用来存放AD的转换结果,低12位有效

voidADC_GPIO_Configuration(void);

staticvoidDelay_ARMJISHU(__IOuint32_tnCount)

{for(;nCount!

=0;nCount--);}

intmain(void)

{

u16ADCConvertedValueLocal;

USART_InitStructure.USART_BaudRate=115200;

USART_InitStructure.USART_WordLength=USART_WordLength_8b;

USART_InitStructure.USART_StopBits=USART_StopBits_1;

USART_InitStructure.USART_Parity=USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

STM_EVAL_COMInit(COM1,&USART_InitStructure);

/*EnableDMA1clock*/

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

DMA_DeInit(DMA1_Channel1);//开启DMA1的第一通道

DMA_InitStructure.DMA_PeripheralBaseAddr=DR_ADDRESS;DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&ADCConvertedValue;

DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//DMA的转换模式为SRC模式,由外设搬移到内存

DMA_InitStructure.DMA_BufferSize=1;//DMA缓存大小,1个

DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//接收一次数据后,设备地址禁止后移

DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;//关闭接收一次数据后,目标内存地址后移

DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//定义外设数据宽度为16位

DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;//DMA搬移数据尺寸,HalfWord就是为16位

DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//转换模式,循环缓存模式。

DMA_InitStructure.DMA_Priority=DMA_Priority_High;//DMA优先级高

DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//M2M模式禁用

DMA_Init(DMA1_Channel1,&DMA_InitStructure);

/*EnableDMA1channel1*/

DMA_Cmd(DMA1_Channel1,ENABLE);

/*EnableADC1andGPIOCclock*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOC,ENABLE);//使能ADC和GPIOC时钟

/*ADC1configuration------------------------------------------------------*/

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//独立的转换模式

ADC_InitStructure.ADC_ScanConvMode=ENABLE;//开启扫描模式

ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//开启连续转换模式

ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//ADC外部开关,关闭状态

ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//对齐方式,ADC为12位中,右对齐方式

ADC_InitStructure.ADC_NbrOfChannel=1;//开启通道数,1个

ADC_Init(ADC1,&ADC_InitStructure);

/*ADC1regularchannel13configuration*/

ADC_RegularChannelConfig(ADC1,ADC_Channel_16,1,ADC_SampleTime_55Cycles5);

//ADC通道组,第11个通道采样顺序1,转换时间

/*EnableADC1DMA*/

ADC_DMACmd(ADC1,ENABLE);//ADC命令,使能

/*EnableADC1*/

ADC_TempSensorVrefintCmd(ENABLE);//使能温度传感器和内部参考电压通道

ADC_Cmd(ADC1,ENABLE);//开启ADC1

/*EnableADC1resetcalibarationregister*/

ADC_ResetCalibration(ADC1);//重新校准

/*ChecktheendofADC1resetcalibrationregister*/

while(ADC_GetResetCalibrationStatus(ADC1));//等待重新校准完成

/*StartADC1calibaration*/

ADC_StartCalibration(ADC1);//开始校准

/*ChecktheendofADC1calibration*/

while(ADC_GetCalibrationStatus(ADC1));//等待校准完成

/*StartADC1SoftwareConversion*/

ADC_SoftwareStartConvCmd(ADC1,ENABLE);//连续转换开始,ADC通过DMA方式不断的更新RAM区。

while

(1)

{

vu16Temperature,a,b,c,d;

ADCConvertedValueLocal=ADCConvertedValue;

Temperature=(1.43-ADCConvertedValueLocal*3.3/4096)*1000/4.35+25;

ADCConvertedValueLocal=Temperature;

a=ADCConvertedValueLocal/1000;

b=(ADCConvertedValueLocal-a*1000)/100;

c=(ADCConvertedValueLocal-a*1000-b*100)/10;

d=ADCConvertedValueLocal-a*1000-b*100-c*10;

printf("\r\n当前STM32芯片内部温度为:

%d%d%d%d%℃.\n\r",a,b,c,d);

Delay_ARMJISHU(8000000);

}

}

voidADC_GPIO_Configuration(void)//ADC配置函数

{

GPIO_InitTypeDefGPIO_InitStructure;

//PC0作为模拟通道10输入引脚

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//管脚1

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//输入模式

GPIO_Init(GPIOC,&GPIO_InitStructure);//GPIO组

}

超级终端显示如下:

关于一些数据格式的定义解释:

#ifndef__STM32F10x_TYPE_H#define__STM32F10x_TYPE_H

typedefsignedlong?

s32;

typedefsignedshorts16;

typedefsignedchar?

s8;

typedefsignedlong?

constsc32;typedefsignedshortconstsc16;typedefsignedcharconstsc8;

typedefvolatilesignedlong?

vs32;

typedefvolatilesignedshortvs16;

typedefvolatilesignedchar?

vs8;

typedefvolatilesignedlong?

constvsc32;typedefvolatilesignedshortconstvsc16;typedefvolatilesignedcharconstvsc8;

typedefunsignedlong?

u32;

typedefunsignedshortu16;

typedefunsignedchar?

u8;

typedefunsignedlong?

constuc32;typedefunsignedshortconstuc16;typedefunsignedcharconstuc8;

typedefvolatileunsignedlong?

vu32;

typedefvolatileunsignedshortvu16;

typedefvolatileunsignedchar?

vu8;

typedefvolatileunsignedlong?

constvuc32;typedefvolatileunsignedshortconstvuc16;typedefvolatileunsignedcharconstvuc8;

typedefenum{FALSE=0,TRUE=!

FALSE}bool;

typedefenum{RESET=0,SET=!

RESET}FlagStatus,ITStatus;

typedefenum{DISABLE=0,ENABLE=!

DISABLE}FunctionalState;#defineIS_FUNCTIONAL_STATE(STATE)(((STATE)==DISABLE)||((STATE)==ENABLE))

typedefenum{ERROR=0,SUCCESS=!

ERROR}ErrorStatus;

#defineU8_MAX?

((u8)255)

#defineS8_MAX?

((s8)127)

#defineS8_MIN?

((s8)-128)

#defineU16_MAX?

((u16)65535u)

#defineS16_MAX?

((s16)32767)

#defineS16_MIN?

((s16)-32768)

#defineU32_MAX?

#defineS32_MAX?

#defineS32_MIN?

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1