nơi chia sẽ kiến thức về kỹ thuật , cơ khí, điện tử, vi điều khiển, lập trình , hệ thống nhúng, cơ điện tử với mọi người
Showing posts with label ARM. Show all posts
Showing posts with label ARM. Show all posts
Sunday, January 11, 2015
Stm8 - 7seg
Vi điều khiển giao tiếp với led 7 đoạn thường không phải là vấn đề quá phức tạp. Tuy nhiên đối với chip stm8s003f3p6 thì mọi chuyện lại khác. Chip này không có port nào liên tục đủ 8 chân để xuất dữ liệu điều khiển led 7 đoạn.
Để giải quyết vấn đề này, ở đây chúng ta sẽ dụng cùng lúc2 port C và D để thực hiện xuất mã led, chương trình con:
void hien_thi(unsigned char data)Vấn đề đã được giải quyết, sau đây là chương trình đầy đủ:
{
GPIO_Write(GPIOC,(maled[data])<<3); //dich du lieu sang ben trai 3bit de lay 5 bit thap
GPIO_Write(GPIOD,((maled[data])>>4)); //dich du lieu sang ben phai 4bit de lay 3 bit cao
}
#include"stm8s_conf.h" // goi thu vien config
//***** Dinh nghi cho cac chan*****/
#define led1 (GPIO_PIN_2)
#define led2 (GPIO_PIN_3)
#define led3 (GPIO_PIN_1)
#define led4 (GPIO_PIN_5)
const unsigned long delay=16000000;
//***** Khai bao bien *****//
unsigned char maled[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned int i,j;
//***** Ham tao thoi gian tre *****//
void delay_ms(unsigned int timer)
{
while(timer--)
{
for(int count=0; count<(delay/1000000);count++);
}
}
void delay_us(unsigned int timer)
{
while(timer--);
}
//***** Ham hien thi cho led 7seg *****//
void hien_thi(unsigned char data)
{
GPIO_Write(GPIOC,(maled[data])<<3); //dich du lieu sang ben trai 3bit de lay 5 bit thap
GPIO_Write(GPIOD,((maled[data])>>4)); //dich du lieu sang ben phai 4bit de lay 3 bit cao
}
//***** Ham cau hinh xung clock cho he thong *****//
static void CLK_Config(void)
{
CLK_DeInit();
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //f_Master = HSI/1 = 16MHz
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); //f_CPU = f_Master/1 = 16MHz
while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY)!=SET); //wait until HSI ready
}
//***** Ham chinh *****//
int main( void )
{
CLK_Config();
GPIO_DeInit(GPIOD);
GPIO_DeInit(GPIOC);
GPIO_DeInit(GPIOA);
GPIO_Init(GPIOD,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOA,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOC,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_WriteHigh(GPIOA,led1);
GPIO_WriteHigh(GPIOA,led2);
GPIO_WriteHigh(GPIOA,led3);
GPIO_WriteHigh(GPIOB,led4);
while(1)
{
for(i=0;i<=9999;i++)
{
for(j=0;j<=100;j++)
{
GPIO_Write(GPIOD,0xff);
GPIO_Write(GPIOC,0xff);
GPIO_WriteLow(GPIOA,led1);
hien_thi(i/1000);
delay_ms(1);
GPIO_WriteHigh(GPIOA,led1);
GPIO_Write(GPIOD,0xff);
GPIO_Write(GPIOC,0xff);
GPIO_WriteLow(GPIOA,led2);
hien_thi((i%1000)/100);
delay_ms(1);
GPIO_WriteHigh(GPIOA,led2);
GPIO_Write(GPIOD,0xff);
GPIO_Write(GPIOC,0xff);
GPIO_WriteHigh(GPIOB,led4);
GPIO_WriteLow(GPIOA,led3);
hien_thi(((i%1000)%100)/10);
delay_ms(1);
GPIO_WriteHigh(GPIOA,led3);
GPIO_Write(GPIOD,0xff);
GPIO_Write(GPIOC,0xff);
GPIO_WriteLow(GPIOB,led4);
hien_thi(((i%10000)%100)%10);
delay_ms(1);
GPIO_WriteHigh(GPIOB,led4);
}
}
}
}
Friday, December 26, 2014
Stm8 -GPIO
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();
}
}
Saturday, December 13, 2014
STM8S003F3P6 - Datasheet
STM8S003F3P6 TSSOP-20
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
|
Nguồn: http://linhkienvn.com/
Subscribe to:
Posts (Atom)
-
Prodic 2010 Full Crack - Prodic 2010 Full Fshare Final Prodic 2010 một trong những phần mềm từ điển- tra cứu thông minh nhất hiện na...
-
Như chúng ta đã biết, PID là một bộ điều khiển có hồi tiếp siêu kinh điển được sử dụng rất nhiều vào những năm 70 của thế kỉ trước. ...
-
Gần như tất cả các hệ thống dựa trên vi điều khiển đều thực hiện nhiều hơn một tác vụ. Ví dụ hệ thống giám sát nhiệt độ tạo ra ba tá...

