[url=home.php?mod=space&uid=760190]@21小跑堂 #申请原创#[/url] 安防门禁系统,显示温湿度信息和人体温信息在显示屏和上位机上,上位机和显示屏能够独立控制门的打开和关闭,当体温异常时候蜂鸣器报警,能够通过上位机或者显示屏设置人体温度阈值,保证人员进出安全。 N32G437 这块芯片是我寒假时候拿到的,该芯片能够支持RT-Thread开发和keil开发,因为我自己本人对于stm32开发比较熟练,就尝试使用keil开发,前期碰到的问题是keil无法导入芯片包,我当时的keil版本是5.18,经过查阅和群友帮助后,我下载5.36后就可以正常开发,由于我是比较擅长裸机开发但是我后期会去尝试使用RT-Thread开发,我自己本人也在学习freertos,操作系统是以后开发所必备的,我开始看到N32G457时候看到工作主频最高是144Mhz,然后在移植过程中我看到它的数据手册,看到它的APB1和APB2和stm32的最高频率一样的,库函数比较类似,然后我也比较擅长使用库函数进行开发,我感觉n32的库函数大致和stm32的库函数基本类似,可能名字有一些改变,然后我就分别把我在stm32每个自己写好的模块给移植过来,移植过程中也碰到了很多坑,比如systick定时器的移植,因为需要严格延时,虽然我自己也写了软件延时函数,然后从国名技术给的资料里面提取出来,将它封装成一个模块,我整个系统用到的有:TIM3用定时器比较输出20ms周期的pwm波,对其进行占空比设置来通过舵机实现开关门,然后我通过使用TIM6基本定时的定时器更新中断来处理温湿度和人体数据的读取,然后三个串口分别用来调试、屏幕通信、wifi通信等等。 对于控制舵机转多少角度,我比较推荐的是写一个串口程序能够控制TIM_SetCmp1函数设置的值,我的GENERAL_TIM_Init(1999,719);//arr,psc 然后我自己测试的时候1750和1850正好相差90度,然后我是使用的180度的mg90舵机,最后就是我是给舵机单独供电,最后舵机和板子共地就行。 对于温湿度的获取:我使用的是dht11,大家如果想精度更高一些,可以使用sht11, DHT11有三个引脚,供电3.3v和5v都行,DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下: 一次完整的数据传输为40bit,高位先出。 数据格式: 8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据 +8bit校验和 数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。 用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。然后控制时间这部分我使用的是滴答定时器严格延时。 对于测人体温度我使用的mlx90614,网上还挺贵的,如果要精度搞一些的话,然后mlx90614的数据读取方式有两种,我是选择的iic读取,我之前stm32是用的模拟iic读取的,我移植后也是模拟iic读取,具体读取过程我就不过多赘述了。 串口的话我是用到两个中断,一个接收中断,一个接收帧中断,我自己当时stm32时候就写了一个串口接收任意数据长度,最理想情况是使用dma,但是我当时就解决了串口dma发送,没有实现串口dma接收,所以以后可能会实现,比较dma会更快。 最后就谈到使用这个板子,我感觉用起来很顺手,首先它的dap下载和串口整合在一起,使用起来很方便,国产芯片的崛起,以后做东西我们会使用国名技术的板子,现在stm32也很贵,就没有使用的,而且n32g457这个芯片的最高主频可以达到144mhz,最后很感谢国民技术的支持,提供的资料,我可能会因为某一个问题可能会调试很久,但是这种经验是慢慢累积起来的,可能发现问题就是一个简单问题,碰到问题不要放弃,总会找到解决方法,然后最好是每个模块一个个调通后再进行整合,出问题时候,先一个个排除哪个问题,比如温度显示不正确,我先 串口打印看串口数据是否是我想要的,如果是正常,在通过wifi给上位机发送看对不对,做东西需要有耐心,加油,视频和图片如下,
因为视频上传不了,我就上传了b站:https://www.bilibili.com/video/BV14L411T7A5/
|