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