最后,报告一下测试结果
(1) 室温下读到的温度传感器的输出为1700。
要将其转换成温度,还要找张表:(见下图)
由于该表都是用电压来表示的,所以要将1700转换成电压值。
(1686/4096)*3.3=1.3583
那么温度就是:
T=(1.43-1.3583)/4.3*1000)+25
=14.03+25
=39度
(2)拿电吹风来,一阵吹,读数变为1550
电压值:(1550/4096)*3.3=1.2488V
再次计算:
T=(1.42-1.2488)/4.3*1000+25
=42.1+25
=67.1度
(3)开空调吹,读数变为1730,这个就不计算了,但是可以肯定数值变化趋势是对的了。
从第一个39这个值来看,测温的大体范围是对的,因为我在室内,估计当时的温度可能会有33~34度左右,这个39差了很多,原因:(1)V25和Avg_Slope都是取的中间值,这个未必对;(2)测量值和电压没有精确对照测量,估计误差也比较大。(3)是否与采样时间有关系?这个还要验证。
因此,如果某个应用中只是单独测温的话,这两点都要注意,要在生产后有个修正的表格,否则误差会比较大。
三、外部引脚中断使用
这里描述的仅仅只是诸多可能性中的一种,并不表示以下内容全部正确,因为Contex的中断和8位单片机的相比,真的是太复杂了。
我想要实现的功能
PD0,PD1,PD2作为输入管脚,使用它们的下降沿触发,分别令PD8,PD9,PD10管脚上的电平取反。
实现的过程
(1)管脚配置:这个不复杂,分别把PD0…PD2配置成Float Input,将PD8…PD10配置成推挽输出即可,这里不再写出源代码。
(2)外部中断线配置:
这里需要说明,在STM32内部有19条外部中断线,但是它们并不完全确定连接到哪些位置。其中EXTI0线可以和以下这些引脚连接:
其他的就不一一列举了,16条线分别可能和一组I/O中的16条引线连接在一起。这是通过EXTIO[3:0]这组寄存器来设置的。那么用STM32的库编程的话,库函数是什么,在什么位置呢?(以 3.1.2库为例)
设置管脚与中断线连接的函数不在stm 32f10x_exti.c中,而是在stm 32f10x_gpio.c中。
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PINSource)
{……
}
参数是两个字节型变量,分别指定端口,及端口中指定的管脚,这些当然也是有预定义的。这些预定义在stm 32f10x_gpio.h头文件中。
下面给出的例子:
/*把PORTD 0,1,2三条引脚与EXT0,1,2分别相连*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource0) ;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource1) ;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource2) ;
看了例子,如果要配置其他的管脚,应该可以依葫芦画瓢了。
这样19条外中断线就清楚了。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页
本文关键字:手记 嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术