Professional Documents
Culture Documents
Lập Trình Căn Bản ARM STM32F103C8T6
Lập Trình Căn Bản ARM STM32F103C8T6
ARM STM32F103C8T6
By
Manufacturer Part
STM32F103C8T6
Number
Description
Vendor
STMicroelectronics
Category
Program Memory
64KB (64K x 8)
Size
RAM Size
20K x 8
Number of I /O
37
Package / Case
48-LQFP
Speed
72MHz
Oscillator Type
Internal
Packaging
Tray
Program Memory
FLASH
Type
EEPROM Size
Core Processor
Data Converters
A/D 10x12b
Core Size
32-Bit
Operating
Temperature
-40C ~ 85C
Connectivity
Peripherals
Voltage - Supply
(Vcc/Vdd)
2 V ~ 3.6 V
Lead Free
RoHS Status
RoHS Compliant
Other Names
STM32F103C8T6
STM32F103C8T6
497 6063 ND
4976063ND
497-6063
TNG QUAN
S NGUYN L KIT STM32F103
CNG C H TR
TO 1 PROJECT MI
3. M Keil C ln v to mt Project mi
- y chng ta to th mc l Demo
- 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
10
11
Tab Output : nh du chn Create HEX File to file HEX np cho VDK
12
Tab
C/C++:
ti
dng
Deline
vo
USE_STDPERIPH_DRIVER,
STM32F10X_HD
13
File HEX y:
Vy l chng ta hon thnh xong vic to 1 Project mi cho ARM STM32 dng
KeilC
14
/* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */
/* #define STM32F10X_MD */
/* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices
*/
/* #define STM32F10X_HD */
/* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */
/* #define STM32F10X_XL */
/* #define STM32F10X_CL */
/* 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.
15
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
16
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
17
Output Mode :
CNF[1:0] info
00 output push/pull
01 output open drain
10 alternate output push/pull
11 alternate output open drain
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"
18
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
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;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_ResetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1);
19
Khi to GPIOB
while(1){
GPIO_ResetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1);
delay_ms(100);
GPIO_SetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1);
delay_ms(100);
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:
20
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.
21
22
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);
23
//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;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
24
//USART1 RX
GPIO_Init(GPIOA, &GPIO_InitStructure);
Cu hnh UART:
void USART1_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
//Chon BaudRate
USART_InitStructure.USART_BaudRate = 115200;
//Chon Parity
USART_InitStructure.USART_Parity = USART_Parity_No;
25
Hm ghi d liu
Hm c d liu t cng UART:
USART_ReceiveData(USART1);
2. Lp trnh giao din truyn nhn d liu UART dng Visual Basic
- Khi ng chng trnh:
26
27
- Tip tc vi button
28
29
- Ko th MSCOM vo form
- son tho code cho chng trnh VB, ta click chut vo v tr bt k trong
form
30
- V nt Exit
31
- Kt qu :
- Chn file Make tut.exe to file thc thi v chy nh mt phn mm thng
thng
32