UART 全称 Universal Asynchronous Receiver Transmiter 即通用异步收发器,是一种通用的串行、异步通信总线。该总线有两条数据线,可以实现全双工的发送和接收。在嵌入式系统中常用于主机与辅助设备之间的通信。
(因为有两条数据线,所以可实现全双工通信。)
串口通信中重要的参数包括波特率、停止位、数据位、奇偶校验位等。典型的串口通信仅需三根线,发送数据线、接收数据线和地线。
温度传感器配置:
TR0=0x01; //设置为 1 来连接温度传感器到
SOC_ADC ATEST=0x01; //使能温度传感
AD 传感器配置:
ADCCON3 = (0x3E); //选择 1.25V 为参考电压;14 位分辨率;内温度传感器采样
ADCCON1 |= 0x30; //选择 ADC 的启动模式为手动
ADCCON1 |= 0x40; //启动 AD 转化
void main(void)
{
char i;
float AvgTemp;
char strTemp[6];
InitUART(); //初始化串口
InitSensor(); //初始化 ADC
while(1)
{
AvgTemp = 0;
for (i=0; i<64; i++)
{
AvgTemp += GetTemperature();
}
AvgTemp = AvgTemp/64; //每次累加后除 64
//从概率角度上来看,取平均值,可以提高计算精度
memset(strTemp, 0, 6);
sprintf(strTemp,"%.02f", AvgTemp);//将浮点数转成字符串
UartSendString(strTemp, 5); //通过串口发给电脑显示芯片温度
DelayMS(1000); //延时
}
}
#define HAL_ADC_REF_1V25 0x00
#define ADC_12_BIT 0x30
#define ADC_EMP_SENS 0x0E
#define ADC_TO_CELSIUS(ADC_VALUE) ((ADC_VALUE>>4)-334) //温度校正
float GetTemperature(void)
{
unsigned int value;
unsigned char tmpADCCON3 = ADCCON3;
ADCIF = 0;
//选择1.25V为参考电压;12位分辨率;对片内温度传感器采样
ADCCON3 = (HAL_ADC_REF_1V25 | ADC_12_BIT | ADC_EMP_SENS);
while(!ADCIF); //等待 AD 转换完成
value = ADCL >> 2; //ADCL 寄存器低 2 位无效
value |= (((unsigned int)ADCH) << 6);
ADCCON3 = tmpADCCON3;
return ADC_TO_CELSIUS(value);
}
void InitUART(void)
{
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3C; //P0用作串口
P2DIR &= ~0xC0; //P0优先作为UART0
U0CSR |= 0x80; //串口设置为UART方式
U0GCR |= 11;
U0BAUD |= 216; //波特率设为115200
UTX0IF = 1; //UART0 TX中断标志初始置位1
U0CSR |= 0x40; //允许接收
IEN0 |= 0x84; //开总中断,接收中断
}
void InitSensor(void)
{
DISABLE_ALL_INTERRUPTS(); //关闭所有中断
InitClock(); //设置系统主时钟为 32M
TR0=0x01; //设置为1来连接温度传感器到SOC_ADC
ATEST=0x01; //使能温度传感
}
[1] 基于UART的嵌入式设备间连接方式的研究与验证