Time of Update: 2018-12-05
如?下是看門狗的基本介紹以及基本的操作。大致上還算比較簡單。EFM32的WDT不同於其他MCU,WDT不能用作定時器,如果看門狗溢出,一定會引起系統複位。同時在程式中也可以查詢複位的標誌位來判斷是否為看門狗引起的複位。另外就是,僅可以在WDT使能的狀態下,才可以對WDT的寄存器進行操作。最後,一般習慣於先調試其他功能,等其他功能全部調試完畢之後,再加入WDT,以減少軟體調試的複雜度和難度。看門狗初始化:WDOG_Init_TypeDef init ={ .enable = true,
Time of Update: 2018-12-05
造成MCU複位的原因,想必很很多。但是如何找到是何原因造成的複位,有時候卻並不好找。EFM32提供了RMU的模組,全稱為Reset Magagement Unit,複位嵌入式管理單元。利用這個單元,就可以很方便的找到複位的原因了。在MCU啟動並執行過程當中,RMU會一直不停的檢測各種複位源,例如POR Power-on Reset上電複位,BOD Brown-out
Time of Update: 2018-12-05
繼續使用上次的Demo,我們來申明一個LEUart的問題。硬體準備: TG STK, LEUart0, Tx:PD4, Rx:PD5. TG STK的20pin擴充口上已經有這兩個IO口,分別是12Pin(PD4),14Pin(PD5)。軟體準備:我們簡化一下上次的常式,僅僅讓LEUart發送0x01.#include <stdint.h>#include <stdbool.h>#include "efm32.h"#include
Time of Update: 2018-12-05
在做UART功能之前,必定會面對一個問題, 在我目前的時鐘頻率下,我應該用何種傳輸速率是最合適的?誤碼率是最低的。針對EFM32,UART的過採樣可以配製成4, 6, 8, 16次, 而分頻係數為15bit,前13bit為整數,後2bit是小數位。總體的計算公式如下:USARTn_CLKDIV = 256 x ((fHFPERCLK/(oversample x brdesired)) -
Time of Update: 2018-12-05
EFM32的EM3雖然功耗很低,0.6uA,但是在一些場合仍然顯得浪費,特別是那種一次性消費的電池供電產品,客戶的想法仍然是越低越好,最好是不耗電。所以,很多時候,就只能讓MCU進入EM4狀態。當EFM32進入EM4狀態之後,片內的幾乎所有模組都掉電了,只有特殊的的幾個GPIO口以及外部Reset引腳才能喚醒。那幾個特殊的GPIO口就是具有EM4喚醒的引腳,例如PF2,PE13等等。另外,軟體也可以配置GPIO口喚醒的極性,例如下降沿喚醒,以及上升沿喚醒等。這些由GPIO_EM4WUPOL寄存器
Time of Update: 2018-12-05
VCMP基本操作常式,是從Application Note中摳出來的。#include "stdio.h"#include "efm32.h"#include "em_cmu.h"#include "em_vcmp.h"#include "em_gpio.h"unsigned char VCMP_Voltage_Get_Level(void){ CMU_ClockEnable(cmuClock_CORELE, true); /* Initialize VCMP */
Time of Update: 2018-12-05
目前Touch demo中的觸控螢幕校正演算法,是採用了Carlos E. Vidales寫的一種折算方法。基本原理是在屏上面取三個點分別是上部中間,中部右側以及下部中間,然後做校正。具體的折算原理,請參考如下的連結:英語原文:http://www.embedded.com/design/configurable-systems/4023968/How-To-Calibrate-Touch-Screens中文版:http://www.eet-china.com/ART_8800302522_48
Time of Update: 2018-12-05
記得以前有測試過EFM32採用32KHz時鐘做為主頻時的功耗,但是前幾天想再翻一下測試記錄,才發現不知道以前是沒有做過測試呢還是未留下資料,反正是找不出出來了。算了,再來一次吧。硬體平台還是選擇TG的STK,代碼如下:void main(void){ CHIP_Init() CMU_ClockSelectSet(cmuClock_HF, cmuSelect_LFRCO); CMU_ClockEnable(cmuClock_GPIO, true);
Time of Update: 2018-12-05
大清早,天微微亮(稍微誇張一點,房間比較暗)。一陣急促的手機鈴聲將我從睡夢中拉扯出來。機械般的滑動手機介面,喂,您好。喂,你好,我遇到個問題,請幫忙。這個情境,不知道已經重複了多少回了。言歸正傳,這次的問題,很奇怪。問題描述:客戶反映,GPIO口中斷無法正常的從EM2下喚醒MCU(GG380)。具體描述如下:1.
Time of Update: 2018-12-05
EFM32提供的開發套件常式裡好像沒有關於定時器的常式,這兩天在調試過程中用到了定時器,雖然使用定時器很容易,但是在定時器的配置、中斷的設定過程中還是花費了一些時間。現在我把定時器的使用過程和配置程式貼上來,方便以後有人用到時可以很快的添加到自己的項目中。1、初始化定時器,如果只做定時應用,只需要設定定時器的時鐘、定時模式、Top寄存器。void InitTimer1(void){ TIMER_Init_TypeDef init_timer; //首先定義一個用於定時器初始化的結構體
Time of Update: 2018-12-05
給出數字1,2,3.列印出所有可能的排列。如:123, 132, 213, 231...#include <iostream>using namespace std;void print(int a[], int begin, int n){ if (begin == n) { for (int i = 0; i < n; i++) { cout << a[i]; }
Time of Update: 2018-12-05
簡介:USART整合了SPI及UART,所以僅僅只有SPI的demo是不夠的。因此,才有了這段最簡單的UART的運行常式。發送使用迴圈發送。接收使用中斷接收。硬體準備:TG STK , 將20pin 擴充口的4腳與6腳相串連。第4腳為PD0,Tx, 第6腳為PD1,Rx。軟體流程:UART配置完畢之後,在主函數中不停的發送0到9. 而接收中斷中則判斷是否接收到了5,如果是則翻轉LED燈的狀態。結果就可以看到LED燈不停的亮滅。常式代碼如下:#include
Time of Update: 2018-12-05
使用了emWin之後,除了畫圖形或bmp之外,另外一個大頭就是顯示字元了。字元包括ASCII碼,當然最重要的就是漢字顯示了。這裡就介紹如何產生自訂的漢字字型檔,以及如何顯示在TFT螢幕上。硬體準備:GG DK3750或支援emWin的裝置軟體準備: GG DK3750 -> Example -> guidemo, FontCvt.exe, U2C.exe1. 開啟Simplicity Studio目錄下的reptile\emwin\exe檔案夾,安裝SetupFontCvt_V516
Time of Update: 2018-12-05
問一個問題,如果需要測量一個函數的執行時間,一般使用什麼辦法?我想各位看官應該都有自己的方法吧。那我自己來說,只要有示波器,我肯定使用GPIO翻轉,然後用示波器測量的方法。如果沒有示波器,則使用Systick中的Count或則是定時器的Count來計數的方法。但是經過好友的提醒,原來Cortex-M3中還有另外一個方法。大家都應該知道Cortex-M3中有很多的調試組件,什麼ITM,ETM,DWT等等。如果可以的話,您看看DWT的寄存器,就可以發現,原來DWT(Data Watchpoint
Time of Update: 2018-12-05
#include <iostream>#include <queue>using namespace std;struct Node{ int value; Node *left; Node *right;};void printNumOfEveryLevel(Node *root){ if (NULL == root) { return; } queue<Node*>
Time of Update: 2018-12-05
僅以此貼來提醒自己不要忘記紅外接收二極體的一些基本參數。1. 暗電流:在紅外接收二極體處於截至狀態時,仍然存在一種電流,叫做暗電流。該暗電流和反向電壓有稍許關係,但是和溫度相關性較大。如所示: 2. 紅外接收二極體容易受到幹擾。它對一定範圍的波長都會有反應:3.
Time of Update: 2018-12-05
比如:原來棧中從頂到底的元素分別為1, 2, 3, 4, 5。.翻轉後棧中從頂到底應分別為5, 4, 3, 2, 1。#include <stack>using namespace std;void addToStack(stack<int> &buf, int value){ if (buf.empty()) { buf.push(value); } else { int
Time of Update: 2018-12-05
計算兩個字串的最長公用子字串。如"BACABA","ABCBDAB"的最長公用子字串為“BCAB”。若有多個相同長度最長公用子字串,列印其中之一即可。#include <iostream>#include <cstring>using namespace std;int maxCommonSubStr(char *a, int m, char *b, int n){if (m < 1 || n < 1){return 0;} int **len =
Time of Update: 2018-12-05
查閱了好多資料,看了好多東西,感覺VC上的藍芽編程好亂,看得頭都大了,下面把看到的和學到的整理一下(如有錯誤,請指正):VC藍芽編程貌似方式不止一種,網上比較流行的是IVT的BlueSoleil_SDK,用windows上的兩種bluetooth的開放介面,一種是以熟悉的windows sockets方式,另外一種是新加入的BlueTooth APIs方式。在SDK的samples中只提到了windows
Time of Update: 2018-12-05
輸入正整數n,要求列印出n*n的蛇形方陣。如n=4時列印如下: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4#include <stdlib.h>#include <stdio.h>#include <string.