① STM8S103F3P6 可以使用那種燒寫器燒寫程序
使用ST-Link就可以燒錄,燒錄器可以在某寶上購買,十幾元的就可以了,一直在用,沒什麼問題,作為初學者買太貴的代價太高了。
② STM8S系列程序示例
/* MAIN.C file
* Function:實現按鍵S1控制LED和蜂鳴器
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "stm8s105c4.h"
_Bool LED1 @PA_ODR:6; //定義PA.6輸出寄存器為LED1
_Bool Beep @PD_ODR:4; //定義PD.4輸出寄存器為蜂鳴器
_Bool S1 @PD_IDR:2; //定義PD.2輸入寄存器為按鍵
//I/O初始化
void GPIO_Init(void)
{
PA_DDR = 0x40; //PA.6推挽輸出
PA_CR1 = 0x40;
PD_DDR = 0x10;//PD.2上拉輸入 、PD.4推挽輸出
PD_CR1 = 0x14;
}
main()
{
GPIO_Init();
while(1)
{
if(S1==0) //如果有按鍵則燈亮,蜂鳴器響
{
LED1 = 1;
Beep = 1;
}
else
{
Beep = 0;
LED1 = 0;
}
}
}
③ 為什麼stm8s103f3p6 定時器不進入中斷
原因找到了。不是定時器設置的問題。而是程序中有這兩條藍色標記的語句: PC_DDR |= 0XE0;//將PC.7,,6,5 設為輸出 //pc2,pc1看起來設置為了輸入,但其實該晶元沒有這兩個引腳 PC_CR1 |= 0XE0;// 推挽輸出 PC_CR2 &= ~0XE0;// MAX SPEED 2MHZ //PC_CR2 |=~0XE0;// 錯誤的語句,看作是誤操作了PC2,PC1引腳,使中斷不能進入。暫時看起來,這個程序不進入中斷,可能是因為將PC_DDR的bit2,bit1位設置為0(復位值也是0),並且又將PC_CR2的bit2,bit1位設置為1(復位值是0),可是STM8S103F3P6又沒有對應的PC2,PC1引腳,於是程序出錯,從而不能進入定時中斷,也不執行其它語句。不過如果不用中斷,其它語句是可以正常執行的,定時器的溢出標志也可以軟體查詢到。
④ stm8s103k3 的晶元 反匯編的 匯編程序 怎麼編譯
建工程文件,用ST Visual Develop進行編譯,編譯出來的文件與原文件完全一樣就可以了
⑤ stm8s103 adc1 和 adc2的區別
adc1就是比adc2多了一些擴展功能,,這個在參考手冊里都有說明的。
⑥ stm8s103k3t6c單片機是要先寫程序還是板上寫
都可以,在板子上寫需要注意燒錄引腳的外圍電路,不能有大電容或二極體等影響電平的原件;
⑦ STM8S系列程序示例
/*********************************************
* STM8S105* TIM2 TIM3輸出PWM PD0 PD3 TIM3輸出PWM,*********************************************/#include "STM8S105K.h"
#include "STM8S105_CLOCK.h"
typedef unsigned char u8;
typedef unsigned int u16;u16 value;
/*******************************************************************************
*** 函數名 : void SystemInit(void)
*** 功能描述: 系統初始化
*** 函數說明: 系統全局初始化
******************************************************************************/
void SystemInit(void)
{ SystemClock_Init();
CLK_PCKENR1 |= 0x60; //使能TIM2與TIM3與主頻連接
PD_CR2 |= 0x80; //使能PD7口外部中斷
}
/*******************************************************************************
*** 函數名 : void main(void)
*** 功能描述: 主函數
*** 函數說明:
******************************************************************************/
void GPIO_init(void)
{
PD_DDR = 0x1F; //配置PD埠的方向寄存器全輸出
PD_CR1 = 0x1F; //設置PD為推挽輸出
PB_DDR|= 0x04; //PB2輸出
PB_CR1|= 0x04; //PB2推挽輸出
PB_ODR|= 0x04; //開5V電源
}
void TIM2_init(void) //TIM2 CH1 工作於模式1
{
// TIM2_CCMR2= 0x60; // PWM 模式 1
TIM2_CCMR1= 0x60; // PWM 模式 1,TIM2 CH1
TIM2_CCER1= 0x03; // CC1配置為輸出
//TIM2_CCER2= 0x03; // CC3使能
TIM2_ARRH = 0x03; // 配置PWM解析度為10位,ARR=0x3FF
TIM2_ARRL = 0xFF; // PWM頻率=8M/0x03FF=7820Hz
TIM2_CR1 |= 0x01; // 計數器使能,開始計數
}
void TIM3_init(void) //TIM3 CH1 ch2工作於模式2,1
{
TIM3_CCMR1= 0x70; //PWM模式2
TIM3_CCMR2= 0x60; // PWM 模式 1
TIM3_CCER1= 0x33; // CC1 CC2配置為輸出,CH1 CH2
TIM3_ARRH = 0x03; // 配置PWM解析度為10位,ARR=0x3FF
TIM3_ARRL = 0xFF; // PWM頻率=8M/0x03FF=7820Hz
TIM3_CR1 = 0x01; // 計數器使能,開始計數
} void Run(void)
{ //TIM2_CCR2H = (unsigned char)(value>>8); // 更新CC2比較寄存器
//TIM2_CCR2L = (unsigned char)(value);
TIM2_CCR1=value;
//TIM2_CCR3=value;
TIM3_CCR2=value;
TIM3_CCR1=value; //注意每個通道都要設CCR
} void init_devices(void)
{
_asm("sim");
SystemInit();
GPIO_init();
TIM2_init();
TIM3_init();
_asm("rim");
} void main( void )
{
init_devices();
while(1)
Run();
} /****************************************************************************
*** 函數名 : @near @interrupt void TLI_IRQHandler (void)
*** 功能描述: 中斷服務程序
*** 函數說明:
*****************************************************************************/
@near @interrupt void TLI_IRQHandler (void) {
PD_CR2 &= 0x7F; //關PD7外部中斷
value+=50;
while(value>1000)
value=0; PD_CR2 |= 0x80; //使能PD7口外部中斷
return;
}
⑧ 璇風敤榪嘢TM8S103F3鐨処AR錛屽崟鐗囨満楂樻墜甯蹇欏晩錛
涓錛岄栧厛鎶奡TM8S鐨勭浜屽姛鑳介夊ソ錛屽彲浠ヤ嬌鐢⊿T--TOOL ST Visual Programmer 榪涜岃劇疆鍜岀儳褰曪紝璁劇疆鐨勬椂鍊欏弬鐓STM8S鐨勮姱鐗囪祫鏂.
浜岋紝鍒癝TVD 閲岄潰榪涜岀紪紼嬪簭錛屽皢緙栧啓鐨勭▼搴忚繘琛岀洿鎺ヤ豢鐪熸搷浣滐紝榪欐ユ搷浣滄e父鍚庯紝鍙浠ュ湪綰胯窇紼嬪簭銆傚綋鐒朵綘涔熷彲浠ヤ粠浠跨湡鐘舵侀鍑烘潵錛岃繖鏃禨TM8S宸茬儳褰曚簡紼嬪簭榪涘幓錛屽傛灉紼嬪簭姝e父鐨勮瘽涔熷彲浠ユe父鐨勫伐浣,搴旇ヤ笉浼氬嚭鐜版病鍙嶅簲鐨勭幇璞°傝佹鏌ヤ竴涓嬬‖浠剁湅鐪嬨