STM8S系列程序示例
求STM8S系列程序示例(英语水平有限,所以程序中的解释要“中文解释”),最好是S105C4的!万分感谢!...
求STM8S系列程序示例(英语水平有限,所以程序中的解释要“中文解释”),最好是S105C4的!万分感谢!
展开
2个回答
推荐于2017-06-08
展开全部
/*********************************************
* 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;
}
* 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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
STM8S主流系列
意法半导体的STM8S系列主流8位微控制器适于工业、消费类和计算机市场的多种应用,特别是要实现大批量的情况。基于STM8专有内核,STM8S系列采用ST的130纳米工艺技术和先进内核架构,主频达到24 MHz,处理能力高达20MIPS。嵌入式EEPROM、RC振荡器和全套标准外设为设计者提供了稳定且可靠的解决方案。
相关工具链,从经济型探索套件到更复杂的评估套件和第三方工具,为利用STM8S微控制器进行开发提供了极大方便。
STM8S系列包括四个产品线,具有不同特性,但是保持了全面兼容性和可升级性,从而减少了未来产品设计变更。
STM8S003/005/007超值型是入门级产品,具有基本功能。
STM8S103/105基本型提供了更多特性和封装选项。
STM8S20增强型配有全套外设,满足中、高端应用的性能要求。
STM8S专用型提供了更多模拟特性和专用固件解决方案。
意法半导体的STM8S系列主流8位微控制器适于工业、消费类和计算机市场的多种应用,特别是要实现大批量的情况。基于STM8专有内核,STM8S系列采用ST的130纳米工艺技术和先进内核架构,主频达到24 MHz,处理能力高达20MIPS。嵌入式EEPROM、RC振荡器和全套标准外设为设计者提供了稳定且可靠的解决方案。
相关工具链,从经济型探索套件到更复杂的评估套件和第三方工具,为利用STM8S微控制器进行开发提供了极大方便。
STM8S系列包括四个产品线,具有不同特性,但是保持了全面兼容性和可升级性,从而减少了未来产品设计变更。
STM8S003/005/007超值型是入门级产品,具有基本功能。
STM8S103/105基本型提供了更多特性和封装选项。
STM8S20增强型配有全套外设,满足中、高端应用的性能要求。
STM8S专用型提供了更多模拟特性和专用固件解决方案。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询