You are on page 1of 33

LP TRNH CN BN

ARM STM32F103C8T6
H tn: Nguyn Ngc H


By
TpHCM, Thng 5, 2014

1
VI IU KHIN ARM STM32F103C8T6

Manufacturer Part
Number
STM32F103C8T6
Description MCU ARM 64KB FLASH MEM 48-LQFP
Vendor STMicroelectronics
Category Integrated Circuits (ICs)
Program Memory
Size
64KB (64K x 8)
RAM Size 20K x 8
Number of I /O 37
Package / Case 48-LQFP
Speed 72MHz
Oscillator Type Internal
Packaging Tray
Program Memory
Type
FLASH
EEPROM Size -

2
Core Processor ARM Cortex -M3
Data Converters A/D 10x12b
Core Size 32-Bit
Operating
Temperature
-40C ~ 85C
Connectivity CAN, I²C, IrDA, LIN, SPI, UART/USART, USB
Peripherals
DMA, Motor Control PWM, PDR, POR, PVD, PWM, Temp
Sensor, WDT
Voltage - Supply
(Vcc/Vdd)
2 V ~ 3.6 V
Lead Free Status Lead Free
RoHS Status RoHS Compliant
Other Names
STM32F103C8T6
STM32F103C8T6
497 6063 ND
4976063ND
497-6063

3
TNG QUAN
S NGUYN L KIT STM32F103



4




5

CNG C H TR
bt u vi lp trnh vi x l ARM STM32 trn kt STM32F103 chng ta cn mt
s cng c sau:
Driver PL2303: dng kt ni vi Vi x l thng qua cng UART v np code cho chp
http://bit.ly/1mXUzxk
Flash BootLoader for ARM: Np code cho chp thng qua bootloader
http://bit.ly/1sUf25T
KeilC MDK : lp trnh C cho dng ARM . ( bn ny khc vi bn Keil C chng ta
thng ci lp trnh cho VDK 8051, nu ai cha c th ci thm MDK lp trnh
cho c 8051 v ARM nh ) Link ti trang ch : http://www.keil.com/arm/mdk.asp
Th vin CMSIS : http://www.ulozto.net/x2JFvXv/stm32f10x-stdperiph-lib-v3-5-0-
zip
Cch ci t c th tham kho trn mng


6
TO 1 PROJECT MI
1. Download v gii nn th vin CMSIS trn v ta c th mc
STM32F10x_StdPeriph_Lib_V3.5.0 , trong ny ta ch 2 th mc chnh l
Libraries v Project
2. To mt th mc mi tin qun l v s dng Project. Copy th mc Library
trn cng vi th mc mi to. trong th mc mi to thm mt th mc User
cha nhng file do ngi dng to ra. Copy cc file c trong
\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Exa
mples\GPIO\IOToggle vo th mc User

3. M Keil C ln v to mt Project mi

- y chng ta to th mc l Demo

7

Hin ca s chn Chip. y chn STMicroelectronics. Chn chip STM32F103C8





8
Ca s mi hin ra, chn No v khng cn thit, chng ta s add sau

Trong Project mi , nhp chut vo Target



9
Nhn vo vung to tn mi cho Project v vung th hai to cc Group. Nh
trn l : Startup, Driver, Cmsis, User. Chn add files add mt s file vo group.
Cc file cn add u nm trong th mc Library
- Group User : add cc file trong mc User va to trn

- Groups Stratup : add file starup_stm32f103_hd.s . ng dn :
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\S
T\STM32F10x\startup\arm


10
- Groups Cmsis: add cc file core_cm3.c
(.\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport ),
system_stm32f10x.c
(STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\S
T\STM32F10x )

- Groups Drive: add cc file driver cn cho Project :
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver
\src


11
Nhn OK hon thnh. Project ca chng ta y nh hnh di:

4. Tip theo l cu hnh cho Project
5. Chn Target Options cu hnh


tab target , nh du chn Use MicroLIB


12
Tab Output : nh du chn Create HEX File to file HEX np cho VDK



Chn Select Folder for Objects V to mt th mc Obj , tng t vi tab Listing


13
Tab C/C++: ti dng Deline g vo : USE_STDPERIPH_DRIVER,
STM32F10X_HD

USE_STDPERIPH_DRIVER : Nm trong stm32f10x.h, khai bo s dng th vin
bn ngoi
STM32F10X_HD : Flash Memory
Nhp vo dng Include Paths ci t th mc Folder Setup cho Project, bn di
vung l nhng th chng ta phi add vo. Mc ch l khai bo cho trnh bin
dch bit c th vin nm u


14
OK, Nhn F7 bin dch chng trnh
Kt qu buil thnh cng:

File HEX y:

Vy l chng ta hon thnh xong vic to 1 Project mi cho ARM STM32 dng
KeilC


15
LP TRNH GPIO BT TT LED
Trc khi bt u chng ta cn quay li mt s vn trong phn 1
Chng ta m file stm32f10x.h ln v xem phn sau :
/* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
/* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */
/* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */
/* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices
*/
/* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */
/* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */
/* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */
/* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */
/* Tip: To avoid modifying this file each time you need to switch between these
devices, you can define the device in your toolchain compiler preprocessor.

- Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
where the Flash memory density ranges between 16 and 32 Kbytes.
- Low-density value line devices are STM32F100xx microcontrollers where the Flash
memory density ranges between 16 and 32 Kbytes.
- Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
where the Flash memory density ranges between 64 and 128 Kbytes.
- Medium-density value line devices are STM32F100xx microcontrollers where the
Flash memory density ranges between 64 and 128 Kbytes.
- High-density devices are STM32F101xx and STM32F103xx microcontrollers where

16
the Flash memory density ranges between 256 and 512 Kbytes.
- High-density value line devices are STM32F100xx microcontrollers where the
Flash memory density ranges between 256 and 512 Kbytes.
- XL-density devices are STM32F101xx and STM32F103xx microcontrollers where
the Flash memory density ranges between 512 and 1024 Kbytes.
- Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.
*/
Trn l hng dn chn define, file startup cho chng trnh. Ty theo chip tng ng
m chng ta cn khai bo cho ng

Mun bit chip ang dng thuc loi no th khi khi to project, lc chn chip c hin
th thng tin chip, chng ta xem Flash bao nhiu chn define cho ng


17
phn trc mnh chn chip STM32F103C8 , c 64kB Flash l chip Medium-Density
nhng li chn define l STM32F10X_HD nn buil c v np code cho VDK
chy th cc bn cn sa li thnh STM32F10X_MD
OK, Vy l qu r ri. By gi chng ta tip tc vi phn GPIO
MCU STM32F10x c nhiu loi vi s lng IO khc nhau. Mi port IO c cu
hnh bi 2 thanh ghi 32bit (GPIOx_CRL&GPIOx_CRH)
- GPIOx_CRL : cu hnh cc pin t 07
- GPIO_CRH : cu hnh cc pin t 815
C 8 ch IO c th lp trnh cho tng pin
- Input floating
- Input pull-up
- Input pull-down
- Analog input
- Output open-drain
- Output push-pull
- Alternate function push-pull
- Alternate function open-drain
Cc bit mode[1:0] cu hnh ch input hoc output

Mode info
00 input( mc nh khi reset)
01 output max 10MHz
10 output Max 2Mhz
11 output Max 50 MHz

Dng F3,F4 tc cc chn c th cao hn. Thng th mnh tc cng tc
ti a lun.
Cc bit CNF[1:0] c ngha ph thuc vo trng thi pin l input hay output
Input Mode :
CNF[1:0] info
00 analog input
01 floating input(digital)
10 input vi pullup/pulldown.
11 reserver


18
Output Mode :
CNF[1:0] info
00 output push/pull
01 output open drain
10 alternate output push/pull
11 alternate output open drain

Ch : ch input pullup/pulldown s do gi tr bit tng ng trn thanh ghi ODR
quyt nh. Nu s dng hm chun trong th vin ca ST th c th cc bn khng cn
bit cng lm c.Nhng theo mnh th nn bit xem hm mnh dng n tc ng vo
thanh ghi no lc cn th c th gn trc tip cho nhanh
Cc pin IO u c dng 5V tolerant (ngoi 2 pin chung chc nng vi thch anh ng
h thi gian thc) tc l c th ni vi cc thit b dng chun 5V. Mnh thng ni
thm con tr nh ni tip vi chn IO nu n l ch input ( phn in p d ri
trn trnh gy hng pin IO).
S cc pin cc bn c th tham kho trong datasheet.Cc thanh ghi quan trng.
Input data register GPIOx_IDR
Output data register GPIOx_ODR
Bit Set/Reset register GPIOx_BSRR
Bit Reset register GPIOx_BRR
lock mechanism register GPIOx_LCKR
Ngoi ra cn c thanh ghi remap cc chn vo ra ca ngoi vi. Cc bn xem trong
datasheet hiu r hn.
Trong th vin stm32f10x_gpio.h cc pin tng ng c nh ngha sn
ngi dng d s dng : GPIO_Pin_x
Cc port c nh ngha bng tn GPIOx trong x: A,B,C,G. Thc cht GPIOx
c dng con tr tr ti a gc ca port tng ng.
Lnh dng khi Set Bit x ca port y : GPIOxBSRR = GPIO_Pin_y
Lnh dng khi Reset bit x ca Port y : GPIOxBRR =GPIO_Pin_y
Hoc dng lnh :GPIOxBSRR = GPIO_Pin_y <<16
Th vin chun ca ST, bt tt cc bit, ta s dng hm GPIO_SetBit() v
GPIO_ReSetBit().

Bt u chng trnh cho GPIO :

#include "stm32f10x.h"

19
Khai bo th vin stm32f10x.h

void delay_ms(uint32_t num);
void delay_ms(uint32_t num)
{
uint32_t index = 0;
for(index = (72000 * num);index !=0;index-- )
{}
}
Chng trnh delay vi phn gii l 1ms, tc gi tr t l 72000 ( 72MHz). Nu
bn mun phn gii l 1us th gi tr t l 72 .

int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
Khai bo bin d liu khi to modul GPIO

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
Cho php xung Clock PortB

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
Cu hnh chon Pin 0 v Pin 15 ch Push-Pull, tc 50Mhz

GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_ResetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1);

20
Khi to GPIOB

while(1){
GPIO_ResetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1);
delay_ms(100);
Cho GPIOB-Pin 0 v Pin 1 mc logic thp, thi gian delay l 100ms

GPIO_SetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1);
delay_ms(100);
Cho GPIOB-Pin 0 v Pin 1 mc logic cao, thi gian delay l 100ms

Xong, on code chp tt led trn kh ngn gn v d hiu. V kim tra tnh chnh
xc th chng ta np code cho VDK xem kt qu
Vic np code cho STM32 c nhiu cch
- JTAG: np v g ri, vic dng JTAG c thc hin trn KeilC nn rt thun
tin cho vic np code, debug , test sn phm,.. nhc im l phn cng rm
r.
- SWD : chun giao tip 2 dy, nh gn n gin v chi ph thp hn so vi JTAG
- Bootloader : phn cng n gin, d thc hin, nhng ch dng cho vic np
code
y, a s khi cc bn mua KIT v hc th u c h tr JTAG v Bootloader nn
mnh s hng dn cc bn np file HEX buil trn vo VDK thng qua Bootloader
vo c ch bootloader th bn phi ci t cho chn BOOT0 =1 v chn
BOOT1=0. chip tip tc chy t b nh Flash th BOOT0=0, BOOT1=1
Khi ng Flash Loader, nu c kt ni vi KIT th s nh hnh:

21

Nhn Next tip tc, nu khng bootloader th s bo li, cn khng th s nh hnh:
Next
Tip theo, ti Download to device , dn n file HEX trn. Tuyt i khng chn vo
Enable/Divsble Flash protecion nu nh khng mun kha chip bo mt chng
trnh. Nhn Next thc hin np code vo chip.

22


Tt bootloader v ci t li 2 chn BOOT1, BOOT0 chy xem nh
Vy l xong chng trnh GPIO chp tt led n gin, coi nh chng ta hon thnh
c 1 project hon chnh t vic ci t chng trnh, khi to, lp trnh project v
np code chy mch tht


23
LP TRNH GPIO C TRNG THI NT NHN
Tng t nh lp trnh GPIO iu khin led n, ta cn khai bo thm trng thi input
cho cc chn input
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
Trong chng trnh chnh ta ch cn c trang thi ca cc chn tn hiu tng ng
iu khin ouput ra led n hoc cc chc nng khc
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11); /
c trng thi trn tng Pin
GPIO_ReadInputData(GPIOA);
c trng thi in put GPIO A


24
LP TRNH UART GIAO TIP PC
1. Lp trnh UART cho ARM STM32
- To mt Project tng t nh vi lp trnh GPIO , chng ta thm driver
stm32f10x_uart.c trong th vin CMIS vo c th lp trnh truyn nhn d
liu UART

- Vit code cho chng trnh chnh trong hm maic.c
Khai bo IO cho UART:
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //USART1 TX
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_8; //USART1 RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

25
GPIO_Init(GPIOA, &GPIO_InitStructure);
Cu hnh UART:
void USART1_Configuration(void)
{

USART_InitTypeDef USART_InitStructure;
//Kich hoat Clock USART1
RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE);
//Chon BaudRate
USART_InitStructure.USART_BaudRate = 115200;

//Chon do dai khung truyen
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
//Chon stop bit
USART_InitStructure.USART_StopBits = USART_StopBits_1;
//Chon Parity
USART_InitStructure.USART_Parity = USART_Parity_No;
//Chon che do dieu khien
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
//Chon phuong thuc truyen nhan
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//
//Cau hinh cac thong so vua lua chon
USART_Init(USART1, &USART_InitStructure);

26
//Kich hoat hoat dong cua USART
USART_Cmd(USART1, ENABLE);
}
Hm ghi d liu
Hm c d liu t cng UART:
USART_ReceiveData(USART1);
Hm gi chui d liu ra cng UART:
USART_SendString(USART1,"demo");

2. Lp trnh giao din truyn nhn d liu UART dng Visual Basic
- Khi ng chng trnh:

- Ca s khi ng chn StandardEXE to mt form mi


27
-Giao din chng trnh

- Click chut vo form1 i tn cho project trong mc caption



28
- Nhp chut vo biu tng textbox ly textbox ra mn hnh

Trong phn thuc tnh ca textbox xa ch text1 trong caption i
- Tip tc chn label ko label vo chng trnh, thay i tn label trong thuc
tnh caption

- Tip tc vi button



29
- Chnh sa v thm mt s thnh phn c form nh hnh di

Nh vy ta to ra mt Form cc tham s a,b hin th vi cc textbox1,2. Nt
truyn l Command1 nt nhn l Command2, nt thot l Command3
Form hot ng nh sau : Nhp cc thng s trong text1, nhn nt truyn gi d
liu trong text1 ra cng COM. Nhn nt nhn th d liu nhn c s hin th ln
text2. Phm Exit thot khi chng trnh
V Control iu khin cng COM-MSCOM khng phi control c bn nn n
khng hin th trn tool, chng ta phi ly ra trong th vin nh sau




30
- Ko th MSCOM vo form

- son tho code cho chng trnh VB, ta click chut vo v tr bt k trong
form

- Giao din chnh



31
- Khai bo s dng cng COM

- vit m cho nt truyn ta click vo nt truyn v code nh sau. Khai bo
thm bin s cha gi tr ca text

- Tng t cho nt nhn

- V nt Exit

- Lu form va to, chn Run chy chng trnh



32
- Kt qu :

- Chn file Make tut.exe to file thc thi v chy nh mt phn mm thng
thng

You might also like