STM8S003F3P6 如何烧写程序,求解答

STM8S003F3P6 如何烧写程序,求解答,第1张

STM8芯片,部谈斗分饥侍厅支持串口ISP。

003F3不支持。

就算是支持串口下载的STM8芯片,初始始用时,也要先用STLINK,把BOOT LOADER选项字节功能使能后且烧录到芯片中去,才能下载。

你可以看下,我博客上有个文章是讲STM8串口下载的。

其实,如果你想长期用STM8芯片,几十块钱的STLINK仿真器工具的钱还是有必要的。。。

磨烂隐刀不误砍柴工嘛。 选好利器还是很重要的。。。

一般情况下,用单片机的PWM实现LED的渐亮渐灭,当然,PWM也是靠定时器实现的,不过你自己也可以模拟出来。给你一个例程,我是用AVR的片子 第一种,PWM方式: /定时器T2初始化 void timer2_init(void) { TCCR2 = 0x00//停止定时器 ASSR = 0x00//异步时钟模式 TCNT2 = 0x00//初纤悔始值 OCR2 = 0x7F//匹配值,改变此值,即可改变占空比的大小,从而调节亮度 TIMSK |= 0x00//中断允许 TCCR2 = 0x61//启动定时器 } 第二种,采用模拟方式,现场写: /定时器T2初始化 void timer2_init(void) { TCCR2 = 0x00//停止定时器 ASSR = 0x00//异步时钟模式 TCNT2 = 0x06//初始值 OCR2 = 0x05//匹配值 TIMSK |= 0x40//中断允许 TCCR2 = 0x03//启动定时器 } //T2溢出中断服务程序毁槐正明搜 #pragma interrupt_handler timer2_ovf_isr:5 void timer2_ovf_isr(void) { TCNT2 = 0x06//1ms定时初值 add_num++//当然,这个得你事先定义好,用于定时器时间累加 if(add_num<a) LED_ON//灯亮的时间 if(add_num<b) LED_OFF//灯灭的时间,b>a,如果b=2a,那么占空比即为50%,a就相当于初值了,改变a,b的大小,即可模拟出PWM了 }

/*********************************************

* STM8S105* TIM2 TIM3输出PWM PD0 PD3 TIM3输出PWM,*********************************************/#include "STM8S105K.h"

#include "STM8S105_CLOCK.h"

typedef unsigned char u8

typedef unsigned int u16u16 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

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12392921.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存