原创 射頻識別技術——數據編碼

射頻識別技術中的調製方法一般使用調幅(AM),也就是將有用信號調製在載波的幅度上傳送出去。這裏的“有用信號”指用高低電平表示的數據“0”或“1”。那麼如何用高低電平表示數據“0”或“1”呢?最簡單的辦法就是用高電平表示“1”,用低

原创 void在C語言中特殊使用

在C語言中,在定義函數時,加在函數名前的“void”表示該函數沒有返回值,調用時直接書寫函數名和參數即可。 但是有些函數明明在定義的時候不是void型,卻在調用時可能會在前面加上void,這表示程序並不關心調用該函數後的返回值是什

原创 如何將多個bin文件合成一個bin文件?(一)

一、使用到的軟件 WinHex 二、所用文件 Bootload.bin Application.bin 三、生成目標文件 Target.bin 四、步驟 1)新建目標文件targe

原创 防止頭文件被重複包含的兩種方式#pragma once 與 #ifdef 的區別

當一個項目比較大時,往往都是分文件,這時候有可能不小心把同一個頭文件 包含多次,或者頭文件嵌套包含,比如: a.h 代碼如下: #include "b.h" b.h 代碼如下: #include "a.h" main.c 代

原创 ESP32開發環境搭建(Windows平臺)

ESP32開發環境搭建之——hello_world 一、所需工具 由於項目要用ESP32模塊進行開發,折騰了下集成開發環境,現將過程記錄下來,以便需要的人使用。其中需要的有交叉編譯工具,esp-idf示例代碼以及C/C++版的eclips

原创 STM32平臺下的TM1812驅動

TM1812芯片的特性如下: 數據傳輸參數及時序: 在上圖中一個串聯了三個TM1812芯片,每個芯片控制四盞燈,每盞燈有R,G,B三種顏色,每種顏色有256(0xFF)階灰度可調,及每個顏色用一個字節控制。發送完全部

原创 普通GPIO模擬SPI通信協議(軟件SPI)

在工作中偶爾會遇到SPI不夠用的情況,而我們又要去使用SPI通信協議,此時就需要我們自己去模擬SPI通信協議。我們知道SPI通信協議有四種模式,它們分別如下所示: 下面是我基於ATSAM4SD16B芯片在Atmel Studio上用

原创 STM32F030C8T6串口接收不定長數據

usart.c文件代碼。 #include "usart.h" #include "gpio.h" UART_HandleTypeDef huart1; /* USART1 init function */ void MX_USART

原创 STM32之串口重定向printf函數和scanf函數

在進行STM32開發時,需要將日誌打印出來,直接使用C語言的庫函數printf是不起作用的,此時就需要我們將串口重定向printf函數。首先我們需要在keil集成開發環境中勾選STM32官方的微庫,如下圖所示: 然後就是重寫fputc

原创 Makefile簡易教程

Makefile簡介 在軟件開發中,make通常被視爲一種軟件構建工具。該工具主要經由讀取一種名爲“makefile”或“Makefile”的文件來實現軟件的自動化建構。它會通過一種被稱之爲“target”概念來檢查相關文件之間的依賴關係

原创 數據結構——雙向鏈表(C語言實現)

/************************************************************************* > File Name: link_list.c > Author: Andy00184

原创 USART配置成SPI實例代碼

在工作中第一次遇到可以將串口當做SPI使用的情況,下面是我在ATSAM4SD16B芯片中書寫的將USART配置成SPI使用的代碼。 // Include files #include "component_usart.h" #includ

原创 什麼是達夫設備(Duff's Device)

在看《你必須知道的496個C語言問題》一書中,提到”達夫設備”這個東西,主要是下面的代碼: register n = (count + 7) / 8; /* count > 0 assumed */ switch (count % 8

原创 STM8L15x系列DAC的使用

在項目中偶爾會使用DA轉換器,我使用的MCU是STM8L151G6U6。我是用的是PB4作爲DA輸出管腳,查閱該芯片的Reference manual手冊可知,PB4是屬於DAC_OUT1,即DAC通道一。 再查閱PB4輸入輸出控制

原创 Log打印技巧(C語言實現)

在實際開發中我們經常要通過打印Log來調試程序,經常會用到打印函數,這裏我書寫了個宏,做到有選擇的打印log。發話不多說,直接貼代碼,希望對各位同仁有所啓發。 /* File : log.c Breif : Define a macro