
* 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
}
STM8芯片,部分支持串口ISP。003F3不支持。
就算是支持串口下载的STM8芯片,初始始用时,也要先用STLINK,把BOOT LOADER选项字节功能使能后且烧录到芯片中去,才能下载。
你可以看下,我博客上有个文章是讲STM8串口下载的。
其实,如果你想长期用STM8芯片,几十块钱的STLINK仿真器工具的钱还是有必要的。。。
磨刀不误砍柴工嘛。 选好利器还是很重要的。。。
stm8s008空间大小是8K 使用的时候会出现空间不够用的情况,这个时候要对软件进行一些设置,从而优化程序大小。1,修改优化等级,如下图所示,这样会优化掉无关的函数,将代码优化到最大程度2,如果代码有多个数组,而ram实际空间不够使用的时候,修改下面的参数,最大修改为0xfff。3,当二维数组定义完报错,无法容纳的时候,在数组前面加上NEAR可解决报错例如:NEAR u8 buff[10][10] = {********}4,当代码还是很多的时候就要从代码逻辑和代码本身一点点的扣 能用数组代替的尽量不用代码,能用u8的不用u16欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)