原创 MQTT初體驗-百度智能雲

說明: 該文章記錄了基於百度智能雲MQTT服務器的測試使用過程,方便以後查閱。 MQTT協議中文版下載 https://legacy.gitbook.com/book/mcxiaoke/mqtt-cn/details   1、創建百度智能

原创 elua STM32F4 驗證之路

我是做自助零售設備的,快速定製嵌入式應用是一個迫在眉睫的需求。 lua腳本開發單片機,感覺很有意思,底層高效不易修改的代碼可以通過C語言實現,上層邏輯業務可以用lua開發,靈活可裁剪。 開始接觸是一次物聯網產品開發,使用了合宙opelua

原创 圖像處理之圓提取

開發是一個遙遠而漫長的路程,每一個程序員都會在這條路上忠貞不渝,直至時間的盡頭,依舊樂此不疲   目的是統計出上圖貼紙中的小圓。 相關參數: 攝像頭:OV2640 開發平臺:ESP32-CAM 處理像素:320*240 1、採集

原创 編碼器正交解碼 STM32F4

  原理: 當計數值向上溢出或者向下溢出時,對應增加和減少重裝載的值 0xFFFF。 對此讀取 (TIM1->CNT + abs_count)是爲了防止中途被中斷打斷而破壞組包數據。不建議屏蔽中斷去讀取,查詢過快時也會造成中斷開啓關閉過快

原创 STM32F4 串口DMA緩衝實現之同步接收 異步發送

目錄 緒論 串口DMA接收 串口發送 啓動一次DMA發送 串口發送的接口函數  DMA發送完成中斷 注意和總結  DMA的中斷標誌問題 中斷及多線程問題  字符設備程序框架展示 字符設備模塊自定義 字符設備接口標準化 字符設備註冊 調用演

原创 程序架構之全局變量管理 (DB)

對於一個處女座的程序源來說,很反感那種全局變量亂飛,函數之間扯來扯去,亂入一團麻的感覺。 程序本可以是很優雅,很美觀的一種享受。所以我自己試圖定製一套適合於單片機的軟件架構。 本來是想上一個專欄的,結果發佈的博客不夠數量。先一點點積攢吧

原创 程序架構之事件機制 event

  事件處理機制在操作系統上是隨處可見,比如電腦鍵盤按下一個按鈕,其實是硬件驅動層拋出的一個事件。就看上層應用誰有這個權限去捕捉這個消息。權限這個在我的小架構裏還展示不考慮。 實現原理 我的事件處理機制大致如下,一個事件可以有多個發佈者,

原创 elua 試水篇

我是做自助零售設備的,快速定製嵌入式應用是一個迫在眉睫的需求。 lua腳本開發單片機,感覺很有意思,底層高效不易修改的代碼可以通過C語言實現,上層邏輯業務可以用lua開發,靈活可裁剪。 開始接觸是一次物聯網產品開發,使用了合宙opelua

原创 STM32F4讀取OV7620

  個人之前接觸過智能車比賽,手裏留下了一個OV7620攝像頭,由於項目需求需要測試一下攝像頭探物性能,便搗鼓一番。 OV7620默認像素320*240=76800。存儲需要75k內存空間。STM32F1保存不了,便上了STM32F4VG

原创 MQTT初體驗

說明: 該文章記錄了基於百度智能雲MQTT服務器的測試使用過程,方便以後查閱。 MQTT協議中文版下載 https://legacy.gitbook.com/book/mcxiaoke/mqtt-cn/details   1、創建百度智能

原创 STM32硬件錯誤HardFault_Handler的處理方法

 在用Keil對STM32的程序進行仿真時程序有時會跑飛,停止仿真程序會停在HardFault_Handler函數裏的死循環while(1)中。這說明STM32出現了硬件錯誤。         STM32出現硬件錯誤可能有以下原因:   

原创 局部變量和全局變量的執行效率問題

定義 局部變量:指在函數內部聲明的變量 全局變量:指在所有函數外部定義的變量 測試 int a=0;//全局變量 int function() { int b=0;//局部變量 a++; b++; p

原创 C語言 char 和 signed char的區別

在STM32項目的開發過程遇到一個奇葩的問題,測試代碼如下: char _char =-1; if(_char!=-1) { pr_dbg("_char!=-1\r\n"); }

原创 STM32 硬件I2C中斷實現

目錄 1、初始化I2C 2、啓動傳輸 3、發送數據流程 4、接收數據 5、Code 6、注意: 對於有嵌入式開發經歷的人來說,I2C是使用場合較多的一種通訊方式,比如MPU6050、AT24C02、LRC9663等等都有I2C通訊接口。我

原创 C語言#define拼接宏定義實現

 使用場合:拼接兩個宏,一個是傳入的宏。但是傳入的宏不會被替換,反而原封不動的接了上去,這就尷尬了。經過各種嘗試,居然成了,特此記錄分享一下,方便大家學習。 char A_param=0; char B_pramm=0; //添加宏定義