【毕业设计】基于STM32的公交站牌系统 - 物联网 嵌入式 单片机
文章目錄
- 1 簡介
- 2 主要器件
- 2.1 ILI9320
- 2.2 串口GPRS模塊
- 2.3 相關傳感器
- 3 實現效果
- 4 設計原理
- 5 部分實現代碼
- 6 最后
1 簡介
Hi,大家好,這里是丹成學長,今天向大家介紹一個單片機項目
STM32公交站牌系統
大家可用于 課程設計 或 畢業設計
單片機-嵌入式畢設選題大全及項目分享:
https://blog.csdn.net/m0_71572576/article/details/125409052
該項目主要是一個模擬公交車信息實時發布系統,采集公交車信息,再發布在站臺和移動客戶端,系統結構如下圖。
2 主要器件
2.1 ILI9320
ILI9320是液晶屏的驅動芯片,屏幕分辨率320 × 240像素,單片機通過FSMC總線控制器操作屏幕,需要16根數據線和6根控制線,外加電源接地等共24根線才能驅動。FSMC(Flexible Static Memory Controller)是STM32的一個并行接口,通過此接口,單片機可以控制NOR Flash、NAND Flash、SRAM 和 PSRAM。除了控制儲存器,FSMC還可以控制支持Intel8080 和Motorola 6800時序的LCD屏幕。
2.2 串口GPRS模塊
選擇通信模塊時考慮到時間有限,選擇開發難度相對較低(不需要開發驅動)的串口GPRS模塊,模塊型號:USR-GSM232-7S3,主要特性是支持GPRS網絡通信,支持數據請求地址自定義或請求至官方后臺,官方后臺提高訪問數據的API。在上位機軟件配置好請求地址后,向串口發送數據,模塊會自動打包數據并向配置的服務器地址發起請求,整個模塊類似一個HTTP客戶端。當然,這個模塊的缺點也很明顯,2G網絡速度太慢,請求一幀數據到收到服務器回復平均需要十幾秒。
2.3 相關傳感器
噪音傳感器和pm2.5傳感器都是通過串口讀取數據,只需按要求初始化串口配置并解析收到的數據即可。DHT11溫濕度傳感器數據讀取需按特定的時序,模塊和單片機間使用單總線傳輸數據。在購買模塊時商家已提供驅動代碼,相關代碼見Github倉庫,驅動時序如下圖所示。
3 實現效果
4 設計原理
站牌主要功能是接收顯示公交信息,但考慮也可以上傳些數據,索性增加幾個傳感器,采集些數據,大概長下面這個樣子。模塊和單片機通訊除了LCD用的FSMC其他都是串口UART。整個站牌部分主要麻煩在LCD屏的驅動和無線通信部分的代碼。
5 部分實現代碼
ILI9320 驅動代碼
//! GPIO結構體聲明 GPIO_InitTypeDef GPIO_InitStructure; //! FSMC NORSRAM結構體聲明 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; //! FSMC 讀寫時序結構體,當擴展模式時,僅有讀時序有效 FSMC_NORSRAMTimingInitTypeDef readWriteTiming; //! FSMC 寫時序結構體,擴展模式使用 FSMC_NORSRAMTimingInitTypeDef writeTiming; //! 使能FSMC時鐘 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //! 使能PART B,D,E,G及AFIO復用功能時鐘, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG,ENABLE); //! PB0---------背光功能 //! PB1---------RESET功能 高電平工作,低電平硬件復位 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //! 推挽輸出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //! GPIO最大輸出頻率50MHz GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);//! PORTD復用推挽輸出 PD0,1,8,9,10,14,15為數據管腳 //! PD4--------RD; PD5-----------WR GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); //! PORTE復用推挽輸出 PE7,8,9,10,11,12,13,14,15為數據管腳 詳細定義見"GPIO管腳及功能定義.txt" 文件 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //! 復用推挽輸出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); //! PORTG復用推挽輸出 PG12----CS; PG0-----RS; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12; //! 復用推挽輸出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitStructure); //拉高RESET管腳,液晶屏才工作 GPIO_SetBits(GPIOB,GPIO_Pin_1);單片機-嵌入式畢設選題大全及項目分享:
https://blog.csdn.net/m0_71572576/article/details/125409052
6 最后
總結
以上是生活随笔為你收集整理的【毕业设计】基于STM32的公交站牌系统 - 物联网 嵌入式 单片机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java两种绑定方式_Javascrip
- 下一篇: 服务器水厂物资管理系统,水处理管理系统及