找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2471|回復(fù): 0
收起左側(cè)

STM32學(xué)習(xí)筆記

[復(fù)制鏈接]
ID:127084 發(fā)表于 2016-6-17 12:19 | 顯示全部樓層 |閱讀模式
0.  注意:新建STM32工程時(shí),添加STM32F10X_HD宏和設(shè)置頭文件路徑十分重要,弄不好久編譯不了。有時(shí)頭文件前需要打兩點(diǎn),有時(shí)一次設(shè)置路徑不會(huì)成功,需多次設(shè)置。我就被這個(gè)困擾了好久。
1.       USART1通用同步異步收發(fā)器:
編程:
.初始化串口,因?yàn)榇谝惨茫桑峡谶M(jìn)行收發(fā)數(shù)據(jù),所以初始化串口時(shí)要申明兩個(gè)結(jié)構(gòu)化類型參數(shù)( GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;)分別對(duì)IO口和串口外設(shè)進(jìn)行初始化。給兩個(gè)結(jié)構(gòu)化類型參數(shù)賦初值用來(lái)設(shè)置兩個(gè)外設(shè)。IOTXPA09,RXPA10調(diào)用IO口初始化外設(shè)函數(shù)GPIO_Init完成。USART1:調(diào)用串口初始化外設(shè)函數(shù)USART_Init完成。
.開(kāi)啟時(shí)鐘。同上也要開(kāi)啟兩個(gè)時(shí)鐘源(RCC_APB2Periph_GPIOA,RCC_APB2Periph_USART1)。調(diào)用APB2時(shí)鐘源開(kāi)啟函數(shù)RCC_APB2PeriphClockCmd完成。
3 .使能USART1外設(shè),USART不同于IO口外設(shè)它要使能,調(diào)用使能USART外設(shè)函數(shù)USART_Cmd完成。
4 .編寫(xiě)輸出打印函數(shù),重定向Printf函數(shù)或自定義USART1_printf函數(shù)。
5 .Main.c中調(diào)用Printf函數(shù)或自定義USART1_printf函數(shù)在串口助手上顯示要輸出的信息。
6 .若有接收從上位機(jī)發(fā)來(lái)的信息時(shí),要用到接收中斷,在stm32f10x_it.c中編寫(xiě)中斷服務(wù)函數(shù)。當(dāng)然用到中斷時(shí)要配置嵌套向量中斷控制器NVIC。調(diào)用NVIC_Init函數(shù)完成,也要申明中斷控制器結(jié)構(gòu)體類型參數(shù)       NVIC_InitTypeDef NVIC_InitStructure;
注意:
1. 用的電源不穩(wěn)定時(shí),會(huì)造成串口接收的數(shù)據(jù)亂碼。
2.  /數(shù)轉(zhuǎn)換器(ADC):
    編程:AD采集通過(guò)串口顯示電壓,串口編程部分跳過(guò)
1.初始化串口。
2.初始化AD,寫(xiě)AD轉(zhuǎn)換地址#define ADC1_DR_Address    ((u32)0x40012400+0x4c),使能ADC1DMA1的時(shí)鐘,初始化串口IOPC.01。調(diào)用RCC_AHBPeriphClockCmd使能DMA1時(shí)鐘,
3.調(diào)用RCC_APB2PeriphClockCmd使能ADC1時(shí)鐘。設(shè)置PC.01為模擬輸入模式不設(shè)置速率。配置ADC1的工作模式為DMA模式,設(shè)置DMA1外設(shè)的一系列參數(shù)配置,使能DMA1外設(shè)模塊。
4.設(shè)置ADC1采樣模式,配置一系列ADC1的參數(shù)。配置ADC1時(shí)鐘,使能ADCDMA外設(shè)使能ADC外設(shè)模塊。開(kāi)啟校準(zhǔn)器,軟件觸發(fā)ADC轉(zhuǎn)換。
5.在主函數(shù)中計(jì)算轉(zhuǎn)換AD的值。用串口顯示出來(lái)。
3.  RTC實(shí)時(shí)時(shí)鐘   
/*要想改變?cè)O(shè)置初值,就將下面if判斷去掉直接上電就執(zhí)行if后面的語(yǔ)句
(當(dāng)然也要將后面的else去掉,否則會(huì)編譯不過(guò)去)。做完上面的活編譯
下載,在串口中設(shè)置時(shí)間初值(通過(guò)串口發(fā)送字符型數(shù)據(jù))。不斷電不復(fù)
位,再將if判斷補(bǔ)上,時(shí)間初值就設(shè)定好了,下次打開(kāi)無(wú)需在設(shè)置。*/  

4. 野火液晶屏上的LCD.C中的void LCD_Str_ENCH_O_P(u16 x,u16 y,const u8 *str,u16 Color)中第1096行的有一個(gè)錯(cuò)誤:    Tmp_y    += 8 ;錯(cuò)寫(xiě)成了     Tmp_x    += 8 ;導(dǎo)致液晶顯示的時(shí)候遇到逗號(hào)就錯(cuò)位全文看不清。根據(jù)我的創(chuàng)作經(jīng)驗(yàn),可以將中文標(biāo)點(diǎn)符號(hào)換成英文標(biāo)點(diǎn)符號(hào)輸出,而不是像野火那樣僅僅將中文逗號(hào)換成空格,本人認(rèn)為可以找出全部的中文標(biāo)點(diǎn)符號(hào)的碼值,再在調(diào)用字庫(kù)前判斷碼值,如果是中文則換為英文符(因?yàn)橐话銤h字字庫(kù)中沒(méi)有標(biāo)點(diǎn)符號(hào)的。如野火的這種。而英文字符庫(kù)中標(biāo)點(diǎn)都有,在液晶上顯示時(shí),中英文符號(hào)區(qū)別不大)。
  關(guān)于找碼值:在文件中一個(gè)中文漢字的碼值共16位。分為高低各八位,高八位為行,低八位為列。但這16位行列數(shù)據(jù)在文件中是分開(kāi)存儲(chǔ)的。要找到一個(gè)漢字或符號(hào),必須先判斷高八位(行數(shù)據(jù))再判斷低八位(列數(shù)據(jù))低八位在高八位后一字節(jié),如*str*(str+1)。例如:野火的液晶程序中沒(méi)有中文標(biāo)點(diǎn)符號(hào)。我修改后的程序中找中文符號(hào)碼值就是用的這種方法。

5.移植彩屏觸摸函數(shù)到別的工程中,不用再去編寫(xiě)彩屏驅(qū)動(dòng)和LCD應(yīng)用函數(shù)(如畫(huà)圓,寫(xiě)字等)
  1.在工程USER中加入兩個(gè)頭文件asc_font.hascii.h。
  2.在工程中添加四個(gè)文件(可直接復(fù)制到USER中再添加進(jìn)工程)分別是lcd.clcd_botton.c、systick.c、Touch.c、和相應(yīng)的頭文件lcd.h、lcd_botton.hsystick.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 四個(gè)函數(shù)。
   5.編寫(xiě)中斷函數(shù),在stm32f10x_it.c中編寫(xiě)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ù)對(duì)彩屏進(jìn)行操作。
6 文件系統(tǒng)移植:
  ff9里面的文件除OPTION00README外全部復(fù)制到USER中,并將CC936.c也復(fù)制到USER中,增加頭文件搜索路徑。在工程面板上的USER項(xiàng)中添加ff9中的C文件并在主函數(shù)中INCLUDE他們的頭文件


已成功!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表