① 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父鐨勫伐浣,搴旇ヤ笉浼氬嚭鐜版病鍙嶅簲鐨勭幇璞°傝佹鏌ヤ竴涓嬬‖浠剁湅鐪嬨