Mọi thắc mắc cơ bản về STM8 tập trung ở đây

Emga

Học sinh phổ thông
Em có thắc mắc, muốn thiết kế mạch nhiều Touch Sensing của Stm8s105.
Trên Kit STM8S105 Discovery có "Solder bridge" - SB3, SB4.
Vậy không biết khi vẽ mạch in Altium thì các Solder bridge này có yêu cầu như thế nào để Touch Sensing hoạt động bình thường?
 

thongtinvtd

Sinh viên đại học
Em có thắc mắc, muốn thiết kế mạch nhiều Touch Sensing của Stm8s105.
Trên Kit STM8S105 Discovery có "Solder bridge" - SB3, SB4.
Vậy không biết khi vẽ mạch in Altium thì các Solder bridge này có yêu cầu như thế nào để Touch Sensing hoạt động bình thường?
theo mình bạn cứ vẽ bình thường, các cầu nối đấy kiểu như để cách ly nếu ko dùng chức năng nút cảm ứng
 

vancuong

Học sinh phổ thông
PWM STM8S | Cộng đồng cơ điện tử Việt Nam | Mechatronics
Theo code PWM ở luồng này, mình có chạy thử chương trình và đo bằng Osilo nhưng không đo được sóng chỉ đo được điện áp nhỉ?
upload_2017-6-13_15-14-34.png


///////////////////Code chạy trên STM8S003F3P6, Osilo đo ở chân ra PD4/////////////////
include "stm8s_conf.h"
#define PORT_PWM1 GPIO_PORTD
#define PIN_PWM1 GPIO_PIN_4
#define PORT_PWM2 GPIO_PORTD
#define PIN_PWM2 GPIO_PIN_3
#define PORT_PWM3 GPIO_PORTA
#define PIN_PWM3 GPIO_PIN_3
uint16_t CCR1_Val = 500;
uint16_t CCR2_Val = 250;
uint16_t CCR3_Val = 125;
//uint16_t CCR1_Val_1;
void Delay(uint16_t nCount);
static void TIM2_Config(void);
static void TIM2_PWM1(uint16_t CCR1_Val_2);

/*
- TIM2_CH1 pin (PD.4)
- TIM2_CH2 pin (PD.3)
- TIM2_CH3 pin (PA.3)
Các TIM2CLK là 2MHz, các Prescaler là 1 nên TIM2 clock truy c?p là 2MHz.

Các TIM2 f= 2 KHz: TIM2 Frequency = TIM2 clock counter / (ARR + 1)
TIM2 là 2KHz.


Các TIM2 CCR1 gia tri dang ky 500, nên TIM2 Channel 2 Kênh 1 tao ra mot
tin hieu PWM voi tan so 2KHz và mot chu ky nhiem 50%:
Chu ky nhiem vu TIM2 Channel1 = [TIM2_CCR1 / (TIM2_ARR + 1)] * 100 = 50%

Các TIM2 CCR2 gia tri dang ky 375, nên TIM2 Channel 2 Kênh 1 tao ra mot
tin hieu PWM voi tan so 2KHz và mot chu ky nhiem 25%:
Chu ky nhiem vu TIM2 Channel2 = [TIM2_CCR2 / (TIM2_ARR + 1)] * 100 = 25%

Các TIM2 CCR3 gia tri dang ky 250, nên TIM2 Channel 2 Kênh 1 tao ra mot
tin hieu PWM voi tan so 2KHz và mot chu ky nhiem 50%:
Chu ky nhiem vu TIM2 Channel3 = [TIM2_CCR3 / (TIM2_ARR + 1)] * 100 = 12,5%


*/

void main(void)
{
/* TIM2 configuration -----------------------------------------*/
/*TIM2_Config(); */

while (1)
{
TIM2_PWM1(10);
Delay(0xFFFF);
TIM2_PWM1(100);
Delay(0xFFFF);
TIM2_PWM1(200);
Delay(0xFFFF);
TIM2_PWM1(300);
Delay(0xFFFF);
TIM2_PWM1(500);
Delay(0xFFFF);
TIM2_PWM1(600);
Delay(0xFFFF);
TIM2_PWM1(700);
Delay(0xFFFF);
TIM2_PWM1(800);
Delay(0xFFFF);
TIM2_PWM1(900);
Delay(0xFFFF);
//===========================================
TIM2_PWM1(900);
Delay(0xFFFF);
TIM2_PWM1(800);
Delay(0xFFFF);
TIM2_PWM1(700);
Delay(0xFFFF);
TIM2_PWM1(600);
Delay(0xFFFF);
TIM2_PWM1(500);
Delay(0xFFFF);
TIM2_PWM1(400);
Delay(0xFFFF);
TIM2_PWM1(300);
Delay(0xFFFF);
TIM2_PWM1(200);
Delay(0xFFFF);
TIM2_PWM1(100);
Delay(0xFFFF);
TIM2_PWM1(10);
Delay(0xFFFF);
}
}
static void TIM2_PWM1(uint16_t CCR1_Val_2)
{
/* Time base configuration */
TIM2_TimeBaseInit(TIM2_PRESCALER_1, 999);
/* PWM1 Mode configuration: Channel1 */
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val_2, TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);
TIM2_ARRPreloadConfig(ENABLE);

/* TIM2 enable counter */
TIM2_Cmd(ENABLE);
}
static void TIM2_Config(void)
{
/* Time base configuration */
TIM2_TimeBaseInit(TIM2_PRESCALER_1, 999);

/* PWM1 Mode configuration: Channel1 */
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);

/* PWM1 Mode configuration: Channel2 */
TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH);
TIM2_OC2PreloadConfig(ENABLE);

/* PWM1 Mode configuration: Channel3 */
TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR3_Val, TIM2_OCPOLARITY_HIGH);
TIM2_OC3PreloadConfig(ENABLE);

TIM2_ARRPreloadConfig(ENABLE);

/* TIM2 enable counter */
TIM2_Cmd(ENABLE);
}
void Delay(uint16_t nCount)
{
/* Decrement nCount value */
while (nCount != 0)
{
nCount--;
}
}
 

trieubao

Học sinh trung cấp
e dùng SDCC code thanh ghi nhưng điều khiển led7seg khác port e thấy khó quá ... vấn đề là mình không thể gán từng PIN với chế độ 0 hoặc 1 đuợc phải (1<<x) để xuất mức 1 ra chân x @@, e dùng thư viện thì nó toàn báo lỗi ?ASlink-Warning-Undefined Global '{hàm edùng trong main.c}' referenced by module, mọi người giúp e với
 

Phuoc8387

Học sinh phổ thông
Cho mình hỏi Con STM8S này .Mình cho chạysuất 1 ngày 12h thì nó sao nhỉ.Nó chạy có ổn định không
 

tdm

Kỹ sư
Bạn cho nó chạy quanh năm suốt tháng cũng được. Còn ổn định hay không thì còn do nhiều yểu tố.
 

qloi

Học sinh phổ thông
Các bác cho mình hỏi mình viết code cho truyền UART như sau mà không tài nào send được kí tự lên PC bằng hàm PRINTF hay putchar. trong khi đó dùng hàm fprintf để chuyển vào mảng rồi dùng hàm printf tự tạo thì gởi lên được. Xin được giúp đở!
Mã:
#include "iostm8s103f3.h"
#include "intrinsics.h"
#include "stdio.h"
//#include "string.h"
#define led PB_ODR_ODR5

#define bt PA_IDR_IDR2   


unsigned char cnt=10;
char str[];

//////////////////////////////////DELAY_FUNCTIONS//////////////////////////////
void delay_us(int time){
  while(time--){
    __no_operation(); //NOP
    __no_operation(); //NOP
    __no_operation(); //NOP
    __no_operation(); //NOP
    __no_operation(); //NOP
    __no_operation(); //NOP
    __no_operation(); //NOP
    __no_operation(); //NOP
  }
}

void delay_ms(int time){
  while(time--){
    delay_us(1000);
  }
}


///////////////////////////////////UART/////////////////////////////////////
void UART_Init(){
  //UART1_BRR1 = 0x34; //
  //UART1_BRR2 = 0x01; // Baudrate ~19200
  UART1_BRR1 = 0x68; //
  UART1_BRR2 = 0x03; // Baudrate 9600
  UART1_CR2 = 0x2C;  // Tx Enable, Rx Enable, Rx Interrupt Enable
  UART1_CR3 = 0x00;  // 1 Stop bits
}

void UART_Write(unsigned char byte){
  while(!(UART1_SR & 0x80));   // wait TXE
  UART1_DR = byte;
}

void UART_Printf(char *message)
{
  while (*message)
  {
    UART1_DR = (unsigned char) *message;     //  Put the next character into the data transmission register.
    while (UART1_SR_TXE == 0);          //  Wait for transmission to complete.
    message++;                               //  Grab the next character.
  }
  //UART_Write(val);
}
////////////////////////////////////GPIO CONFIG///////////////////////////////
void GPIO_CONFG()
{
  PB_DDR_DDR5 = 1;     // PD3 ch? d? Output
  PB_CR1_C15 = 1;      // CR1 ? tr?ng thái cao tr?, cách vi?t khác PD_CR1 = 0x08
  PB_CR2_C25 = 1;      // CR2 ? tr?ng thái Output t?n s? 10Mhz
 
  PA_DDR_DDR2 = 0;     
  PA_CR1_C12 = 1;     
  PA_CR2_C22 = 0;       // disable interrupt on pin A2
 
  /*
  PD_DDR_DDR3 = 0;     
  PD_CR1_C13 = 1;     
  PD_CR2_C23 = 0;*/
}

/////////////////////////////////////Main////////////////////////////////////
void main( void )
{
  CLK_CKDIVR = 0x00;   
 
  GPIO_CONFG();
  UART_Init();
  //interrupt
  __enable_interrupt();
 
 
  while(1)
  {
    if(!bt)
    {
      delay_ms(10);
      while(!bt);
      led = ~led;
      //UART_Printf("a: ");
      //sprintf(str,"gia tri: %u \n\r",cnt++);
      //UART_Printf(str);
      printf("%d \r\n", 12);
      putchar(20);
    }
  }
}

#pragma vector = 0x14
__interrupt void ISR_UART(){

}
 

Quảng cáo Google