Trước tiên ta làm quen với một vài thuật ngữ:
- Input floating: đầu vào thả nổi (cần có trở kéo lên vcc).
- Input pull-up: đầu vào đẩy kéo (không cần trở kéo lên vcc).
- No external interrupt: không cho phép ngắt ngoài.
- External interrupt:cho phép ngắt ngoài.
- Output open-drain: đầu ra cực máng hở (cần có trở treo)
- High-impedance level: mức trở kháng cao (hở mạch)
- Output push-pull: đầu ra đẩy kéo. (không cần trở kéo)
- Low level: mức thấp.
- High level: mức cao.
Khởi tạo:
GPIO_DeInit(GPIOx); //X là port A,B,C,D
GPIO_Init(GPIOx,GPIO_Pin,GPIO_Mode);
/*
Trong đó: GPIOx có thể là GPIOA, GPIOB, GPIOC, GPIOD.
GPIO_Pin là chân cần thiết lập bao gồm:
GPIO_PIN_0 //chân 0 được chọn
GPIO_PIN_1 //chân 1 được chọn
GPIO_PIN_2 //chân 2 được chọn
GPIO_PIN_3 //chân 3 được chọn
GPIO_PIN_4 //chân 4 được chọn
GPIO_PIN_5 //chân 5 được chọn
GPIO_PIN_6 //chân 6 được chọn
GPIO_PIN_7 //chân 7 được chọn
GPIO_PIN_LNIB //4 chân dưới được chọn
GPIO_PIN_HNIB //4 chân trên được chọn
GPIO_PIN_ALL //tất cả chân được chọn
GPIO_Mode là thiết lập chế độ, bao gồm:
GPIO_MODE_IN_FL_NO_IT /*!< Input floating, no external
interrupt */
GPIO_MODE_IN_PU_NO_IT /*!< Input pull-up, no external
interrupt */
GPIO_MODE_IN_FL_IT /*!< Input floating, external interrupt */
GPIO_MODE_IN_PU_IT /*!< Input pull-up, external interrupt */
GPIO_MODE_OUT_OD_LOW_FAST /*!< Output open-drain, low
level, 10MHz (tần số thạch anh) */
GPIO_MODE_OUT_PP_LOW_FAST /*!< Output push-pull, low
level, 10MHz */
GPIO_MODE_OUT_OD_LOW_SLOW /*!< Output open-drain, low
level, 2MHz */
GPIO_MODE_OUT_PP_LOW_SLOW /*!< Output push-pull, low
level, 2MHz */
GPIO_MODE_OUT_OD_HIZ_FAST/*!< Output open-drain, high
impedance level,10MHz */
GPIO_MODE_OUT_PP_HIGH_FAST/*!< Output push-pull, high
level, 10MHz */
GPIO_MODE_OUT_OD_HIZ_SLOW /*!< Output open-drain, high
impedance level, 2MHz */
GPIO_MODE_OUT_PP_HIGH_SLOW /*!< Output push-pull, high
level, 2MHz */
*/
Ví dụ:
- CODE:
GPIO_DeInit(GPIOA);
GPIO_Init(GPIOA, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);
1. Output:
GPIO_Write(GPIOx,PortVal); // xuất mã tương ứng ra port
Ví dụ:
- CODE:
GPIO_Write(GPIOD,0x7A);
GPIO_WriteHigh(GPIOx,PortPins); //đưa mức cao ra 1 chân nhất định
Ví dụ:
Ví dụ:
- CODE:
GPIO_WriteHigh(GPIOA,GPIO_PIN_1);
GPIO_WriteLow(GPIOx,PortPins);//đưa mức thấp ra 1 chân nhất định
- CODE:
GPIO_WriteLow(GPIOA,GPIO_PIN_1);
GPIO_WriteReverse(GPIOx, PortPins); // đảo trạng thái 1 chân nhất định
Ví dụ:
Ví dụ:
- CODE:
GPIO_WriteReverse(GPIOA, GPIO_PIN_1);
Sau đây là một ví dụ cụ thể về output: (chạy led)
- CODE:
#include"stm8s_conf.h"
void delay_ms(unsigned int timer)
{
while(timer--)
{
for(int count=0; count<1000;count++);
}
}
void delay_us(unsigned int timer)
{
while(timer--);
}
void hieu_ung_1();
int main( void )
{
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOC);
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOA, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOD, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);
while(1)
{
hieu_ung_1();
}
}
void hieu_ung_1()
{
GPIO_WriteHigh(GPIOA,GPIO_PIN_1);
delay_ms(20);
GPIO_WriteLow(GPIOA,GPIO_PIN_1);
delay_ms(20);
GPIO_WriteHigh(GPIOA,GPIO_PIN_2);
delay_ms(20);
GPIO_WriteLow(GPIOA,GPIO_PIN_2);
delay_ms(20);
GPIO_WriteHigh(GPIOC,GPIO_PIN_3);
delay_ms(20);
GPIO_WriteLow(GPIOC,GPIO_PIN_3);
delay_ms(20);
GPIO_WriteHigh(GPIOC,GPIO_PIN_7);
delay_ms(20);
GPIO_WriteLow(GPIOC,GPIO_PIN_7);
delay_ms(20);
GPIO_WriteHigh(GPIOC,GPIO_PIN_4);
delay_ms(20);
GPIO_WriteLow(GPIOC,GPIO_PIN_4);
delay_ms(20);
GPIO_WriteHigh(GPIOC,GPIO_PIN_6);
delay_ms(20);
GPIO_WriteLow(GPIOC,GPIO_PIN_6);
delay_ms(20);
GPIO_WriteHigh(GPIOC,GPIO_PIN_5);
delay_ms(20);
GPIO_WriteLow(GPIOC,GPIO_PIN_5);
delay_ms(20);
}
2. Input
GPIO_ReadInputData(GPIOx); // đọc trạng thái ngõ vào 1 port
GPIO_ReadOutputData(GPIOx); // đọc trạng thái ngõ ra 1 port
ví dụ:
GPIO_ReadOutputData(GPIOx); // đọc trạng thái ngõ ra 1 port
ví dụ:
- CODE:
GPIO_ReadInputData(GPIOA);
GPIO_ReadOutputData(GPIOA);
GPIO_ReadInputPin(GPIOx, GPIO_Pin); // đọc trạng thái ngõ vào 1 chân nhất định
Ví dụ:
Ví dụ:
- CODE:
GPIO_ReadInputPin(GPIOA, GPIO_Pin_2);
Code kiểm tra nút nhấn:
- CODE:
#include"STM8S_conf.h"
#include"stdio.h"
//***** Dinh nghia co cac chan*****//
#define data (GPIOD)
#define sw (GPIO_PIN_3)
//*****Kai bao bien*****//
unsigned int data_sw;
//*****Ham tao thoi gian tre*****//
void delay(unsigned int timer)
{
while(timer--);
}
//*****Ham doc nut nhan******//
void Read_sw(void)
{
data_sw = GPIO_ReadInputPin(GPIOC,sw);
if(data_sw==0)
{
delay(60000);
if(data_sw==0)
{
GPIO_WriteLow(GPIOD,GPIO_PIN_4);
}
}
else
GPIO_WriteHigh(GPIOD,GPIO_PIN_4);
}
void clk_config(void)
{
CLK_DeInit();
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//cau hinh tan so xung noi HSI/1=16MHZ
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);// xung cpu=HSI/1=16MHZ
while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY)!=SET);
}
void main(void)
{
clk_config();
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_DeInit(GPIOC);
GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_IN_FL_NO_IT);
while(1)
{
Read_sw();
}
}
No comments:
Post a Comment