|
0. 注意:新建STM32工程時,添加STM32F10X_HD宏和設(shè)置頭文件路徑十分重要,弄不好久編譯不了。有時頭文件前需要打兩點,有時一次設(shè)置路徑不會成功,需多次設(shè)置。我就被這個困擾了好久。
1. USART1通用同步異步收發(fā)器:
編程:
1.初始化串口,因為串口也要用IO口進(jìn)行收發(fā)數(shù)據(jù),所以初始化串口時要申明兩個結(jié)構(gòu)化類型參數(shù)( GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;)分別對IO口和串口外設(shè)進(jìn)行初始化。給兩個結(jié)構(gòu)化類型參數(shù)賦初值用來設(shè)置兩個外設(shè)。IO:TX:PA09,RX:PA10調(diào)用IO口初始化外設(shè)函數(shù)GPIO_Init完成。USART1:調(diào)用串口初始化外設(shè)函數(shù)USART_Init完成。
2.開啟時鐘。同上也要開啟兩個時鐘源(RCC_APB2Periph_GPIOA,RCC_APB2Periph_USART1)。調(diào)用APB2時鐘源開啟函數(shù)RCC_APB2PeriphClockCmd完成。
3 .使能USART1外設(shè),USART不同于IO口外設(shè)它要使能,調(diào)用使能USART外設(shè)函數(shù)USART_Cmd完成。
4 .編寫輸出打印函數(shù),重定向Printf函數(shù)或自定義USART1_printf函數(shù)。
5 .在Main.c中調(diào)用Printf函數(shù)或自定義USART1_printf函數(shù)在串口助手上顯示要輸出的信息。
6 .若有接收從上位機(jī)發(fā)來的信息時,要用到接收中斷,在stm32f10x_it.c中編寫中斷服務(wù)函數(shù)。當(dāng)然用到中斷時要配置嵌套向量中斷控制器NVIC。調(diào)用NVIC_Init函數(shù)完成,也要申明中斷控制器結(jié)構(gòu)體類型參數(shù) NVIC_InitTypeDef NVIC_InitStructure;
注意:
1. 用的電源不穩(wěn)定時,會造成串口接收的數(shù)據(jù)亂碼。
2. 摸/數(shù)轉(zhuǎn)換器(ADC):
編程:AD采集通過串口顯示電壓,串口編程部分跳過
1.初始化串口。
2.初始化AD,寫AD轉(zhuǎn)換地址#define ADC1_DR_Address ((u32)0x40012400+0x4c),使能ADC1和DMA1的時鐘,初始化串口IO口PC.01。調(diào)用RCC_AHBPeriphClockCmd使能DMA1時鐘,
3.調(diào)用RCC_APB2PeriphClockCmd使能ADC1時鐘。設(shè)置PC.01為模擬輸入模式不設(shè)置速率。配置ADC1的工作模式為DMA模式,設(shè)置DMA1外設(shè)的一系列參數(shù)配置,使能DMA1外設(shè)模塊。
4.設(shè)置ADC1采樣模式,配置一系列ADC1的參數(shù)。配置ADC1時鐘,使能ADC的DMA外設(shè)使能ADC外設(shè)模塊。開啟校準(zhǔn)器,軟件觸發(fā)ADC轉(zhuǎn)換。
5.在主函數(shù)中計算轉(zhuǎn)換AD的值。用串口顯示出來。
3. RTC實時時鐘
/*要想改變設(shè)置初值,就將下面if判斷去掉直接上電就執(zhí)行if后面的語句
(當(dāng)然也要將后面的else去掉,否則會編譯不過去)。做完上面的活編譯
下載,在串口中設(shè)置時間初值(通過串口發(fā)送字符型數(shù)據(jù))。不斷電不復(fù)
位,再將if判斷補(bǔ)上,時間初值就設(shè)定好了,下次打開無需在設(shè)置。*/
4. 野火液晶屏上的LCD.C中的void LCD_Str_ENCH_O_P(u16 x,u16 y,const u8 *str,u16 Color)中第1096行的有一個錯誤: Tmp_y += 8 ;錯寫成了 Tmp_x += 8 ;導(dǎo)致液晶顯示的時候遇到逗號就錯位全文看不清。根據(jù)我的創(chuàng)作經(jīng)驗,可以將中文標(biāo)點符號換成英文標(biāo)點符號輸出,而不是像野火那樣僅僅將中文逗號換成空格,本人認(rèn)為可以找出全部的中文標(biāo)點符號的碼值,再在調(diào)用字庫前判斷碼值,如果是中文則換為英文符(因為一般漢字字庫中沒有標(biāo)點符號的。如野火的這種。而英文字符庫中標(biāo)點都有,在液晶上顯示時,中英文符號區(qū)別不大)。
關(guān)于找碼值:在文件中一個中文漢字的碼值共16位。分為高低各八位,高八位為行,低八位為列。但這16位行列數(shù)據(jù)在文件中是分開存儲的。要找到一個漢字或符號,必須先判斷高八位(行數(shù)據(jù))再判斷低八位(列數(shù)據(jù))低八位在高八位后一字節(jié),如*str,*(str+1)。例如:野火的液晶程序中沒有中文標(biāo)點符號。我修改后的程序中找中文符號碼值就是用的這種方法。
5.移植彩屏觸摸函數(shù)到別的工程中,不用再去編寫彩屏驅(qū)動和LCD應(yīng)用函數(shù)(如畫圓,寫字等)
1.在工程USER中加入兩個頭文件asc_font.h和ascii.h。
2.在工程中添加四個文件(可直接復(fù)制到USER中再添加進(jìn)工程)分別是lcd.c、lcd_botton.c、systick.c、Touch.c、和相應(yīng)的頭文件lcd.h、lcd_botton.h、systick.h、Touch.h、。
3.修改stm32f10x_conf.h文件中包含的頭文件,將彩屏需要的外設(shè)頭文件的注釋去掉。分別是: #include "stm32f10x_exti.h"
#include "stm32f10x_fsmc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_spi.h"
#include "misc.h"
4.在工程界面的FWlib欄中添加misc.c stm32f10x_exti.c stm32f10x_fsmc.cstm32f10x_spi.c 四個函數(shù)。
5.編寫中斷函數(shù),在stm32f10x_it.c中編寫void EXTI9_5_IRQHandler(void)中斷服務(wù)函數(shù),并加入頭文件#include<stm32f10x_exti.h> #include <stm32f10x_tim.h>。觸摸中斷。
在中斷函數(shù)中加入
volatile unsigned char touch_flag=0;
extern void TimingDelay_Decrement(void);
extern void Delay_us(__IO u32 nTime);
6.至此就可在工程中調(diào)用函數(shù)對彩屏進(jìn)行操作。
6 文件系統(tǒng)移植:
將ff9里面的文件除OPTION和00README外全部復(fù)制到USER中,并將CC936.c也復(fù)制到USER中,增加頭文件搜索路徑。在工程面板上的USER項中添加ff9中的C文件并在主函數(shù)中INCLUDE他們的頭文件
已成功!
|
|