STM内部温度传感器串口显示完整程序.docx
- 文档编号:4516657
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:6
- 大小:28.88KB
STM内部温度传感器串口显示完整程序.docx
《STM内部温度传感器串口显示完整程序.docx》由会员分享,可在线阅读,更多相关《STM内部温度传感器串口显示完整程序.docx(6页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM 内部 温度传感器 串口 显示 完整 程序