当前位置:首页 » 存储配置 » stm8s怎么配置cfg

stm8s怎么配置cfg

发布时间: 2022-07-16 17:12:26

❶ stm8的定时器的tim2的通道1,通道2输出pwm,对应的GPIO需要配置吗,咋么配置啊

不需要任何配置的,只需要设置PWM的相关寄存,配置成输下PWM,他自动就输出PWM了

#include "STM8S103K.h" //头文件,定义各寄存器的地址

void main(void)
{
/*定时器基础设置*/
CLK_CKDIVR= 0x00; //内部16M时钟不分频
TIM2_PSCR = 0x00; //定时器2预分频系数为1
TIM2_CR1 = 0x01; //内部计数器使能;
TIM2_ARRH = 0x01;//0140,320分频,16M/320=50K,实测49.75K
TIM2_ARRL = 0x3e;//自动装载寄存器低位;实测013e正好为50.0K

/*PWM通道1设置*/
TIM2_CCER1 |= 0x01; //开启OC1信号输出脚
TIM2_CCMR1 = 0x60; //PWM1模式
TIM2_CCR1H = 0x00; //占空比高位
TIM2_CCR1L = 0xa0; //占空比低位
TIM2_CCMR1 |= 0x08; //输出比较1预装载使能

/*PWM通道2设置*/
TIM2_CCER1 |= 0x10; //开启OC2信号输出脚
TIM2_CCMR2 = 0x60; //PWM1模式
TIM2_CCR2H = 0x00; //占空比高位
TIM2_CCR2L = 0x03; //占空比低位
TIM2_CCMR2 |= 0x08; //输出比较2预装载使能

/*PWM通道3设置*/
TIM2_CCER2 = 0x01; //开启OC3信号输出脚
TIM2_CCMR3 = 0x60; //PWM1模式
TIM2_CCR3H = 0x01; //占空比高位
TIM2_CCR3L = 0x3d; //占空比低位
TIM2_CCMR3 |= 0x08; //输出比较3预装载使能

while (1); //
}

❷ 有没有用过STM8S系列单片机的,菜鸟大侠都行。有些入门级疑惑

回答都不如人意呀!分还是给自己好了,几天下来终于有点开窍了。
1,没有发现类似PIC (bits)的位操作的方法,有库函数可以做这种操作,不如PIC使用方便
2,interrupt.c的用法:在STDV的安装目录下有cosmic tutorial文件夹,里面有example project可以参考
3,实例程序官网有,但是用到的库函数cosmic 和toolset里没带
有一个firmwarelib的扩展库函数集,意法半导体官网http://www.st.com/internet/mcu/proct/215110.jsp下载。这些必备的库函数和头文件在编译器里没集成

❸ STM8当中的GPIO各模式如何用

TM8的通用输入/输出口用于芯片和外部进行数据传输。一个IO端口可以包括多达8个引脚,每个引脚可以被独立编程作为数字输入或者数字输出口。另外部分口还可能会有如模拟输入,外部中断,片上外设的输入/输出等复用功能。但是在同一时刻仅有一个复用功能可以映射到引脚上。
复用功能的映射是通过选项字节控制的。请参考数据手册关于选项字节的描述。
每个端口都分配有一个输出数据寄存器,一个输入引脚寄存器,一个数据方向寄存器,一个选择寄存器,和一个配置寄存器。一个I/O口工作在输入还是输出是取决于该口的数据方向寄存器的状态。

GPIO主要功能

  • 可选择的输入模式:浮动输入和带上拉输入

  • 可选择的输出模式:推挽式输出和开漏输出

  • 数据输入和输出采用独立的寄存器

  • 外部中断可以单独使能和关闭

  • 输出摆率控制用以减少EMC噪声

  • 片上外设的I/O功能复用

  • 当作为模拟输入时可以关闭输入施密特触发器来降低功耗

  • 在数据输出锁存时支持读-修改-写

  • 输入兼容5V电压

  • I/O口工作电压范围为1.6 V到VDDIOmax

  • I/O的配置和使用

    每一个端口都有一个输出数据寄存器(ODR),一个引脚输入寄存器(IDR)和一个数据方向寄存器(DDR)总是同相关的。
    控制寄存器1(CR1)和控制寄存器2(CR2)用于对输入/输出进行配置。任何一个I/O引脚可以通过对DDR,ODR,CR1和CR2寄存器的相应位进行编程来配置。
    寄存器中的位n对应于口的引脚n。各种不同配置总结如表18。


    (表18:IO口配置表)

    注意:连接VDD的二极管在实际开漏极状态引脚是无效的,在引脚和VOL之间的局部保护设备重要性是有效的。
    没有使用的I/O引脚必须连接到一个固定的电平值。或者是上拉或者是下拉。

    输入模式

    将DDRx位清零就选择了输入模式。在该模式下读IDR寄存器的位将返回对应I/O引脚上的电平值。
    如表18所示,理论上STM8可以通过软件配置得到四种不同的输入模式:悬浮不带中断输入,悬浮带中断输入,上拉不带中断输入和上拉带中断输入。但是在实际情况下不是所有的口都具有外部中断能力和上拉,用户应参考数据手册中关于每个引脚的实际硬件性能描述来了解更多细节。

    输出模式

    将DDRx位置1就选择了输出模式。在该模式下向ODR寄存器的位写入数据将会通过锁存器输出对应数字值到I/O口。读IDR的位将会返回相应的I/O引脚电平值。通过软件配置CR1,CR2寄存器可以得到不同的输出模式:上拉输出,开漏输出。

    低功耗模式

    表19低功耗模式对STM8S的GPIO口的影响

    模式 描述

    等待(Wait) 对I/O口无影响。外部中断可以使MCU退出等待(Wait)模式

    停机(Halt) 对I/O口无影响。外部中断可以使MCU从停机(Halt)模式唤醒

    注意:如果PA1/PA2被用来连接外部谐振器,为了确保在HALT模式下有最低功耗必须配置PA1和PA2为带上拉输入。

❹ 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;
}

❺ 最近在看STM8S单片机,头都大了,想请问下在STM8S中,

你这是在声明函数原型,所以应当声明每种参数的类型。
但是当你在声明这个函数原型的时候,还没有告诉系统GPIOD等等类型到底是什么。

另外你这里到底是要声明原型、还是要调用啊???如果是后者,应当把前面的void去掉。

说白了,这是C语言的基础能力问题,跟STM8S没什么太大关系。

❻ stm8 的IO 配置问题

if(PB_IDR&0X20==0) M=1;
else if(PB_IDR&0X20==1) M=2;
else if((PB_IDR&0X20)&&(PB_IDR&0X20))M=3;
第2行和第3行一个意思,永远进不到第3行;
case 1:
P5=1;//点LED
delay_1ms(255);
P5=1; //这里应该是P5=0
case 2:

感觉你编程混乱,硬件关系不清。

❼ stm8s103f3p6的afr怎样配置

本文使用的芯片是是stm8s103f3。
以下主要说明配置TIM2通道1为PWM输出的过程。
1.寄存器配置

4位预分频器,计数器的计数频率Fck_cnt=Fck_psc/2^(PSC[3:0])=16M/2^0=16M
那么计数周期为1/16us,也就是说计数器会每隔1/16us计数一次。
TIM2_PSCR=0x00; //分频值=0 16M

自动重装载寄存器,
当自动重装载寄存器=0时,计数器处于阻塞状态,也就是不计数状态,因为当CNTR=ARR时,CNTR就会清零,所以配置时自动重装载寄存器应该大于0。另外自动重装载寄存器的值就是PWM波形的周期,比如ARR=0X0100,PWM的周期为0x0100*1/16=16us,PWM的周期就是16us
TIM2_ARRH=0x01; //自动重装的值 0x0100
TIM2_ARRL=0x00;

捕获/比较使能寄存器,这个寄存器的配置可以选通相应的Tim2通道。
bit5,bit4为ch2配置,bit1,bit0为ch1配置
如果当前OC1为输出通道,则
bit1:OC1低电平有效
bit0:OC1信号被输出到当前引脚上
TIM2_CCER1=bit0|bit1; //low level,OC1

捕获/比较模式寄存器,
bit1,bit0
CC1S[1:0]为捕获/比较选择
00:CC1通道被配置为输出
bit2保留
bit3输出比较预加载使能
0:不使能
1:使能
bit6,bit5,bit4输出比较模式
110:PWM1模式
PWM1和PWM2模式区别
PWM1:CNT<CCR,CH1被激活
PWM2:CNT>CCR,CH1被激活
TIM2_CCMR1=bit3|bit5|bit6; //MODE

捕获/比较寄存器,这个寄存器决定着PWM的占空比。CCR/ARR=PWM的占空比,例如设置为0x0060,那么占空比为0x0060/0x0100=6/16
TIM2_CCR1H=0x00;
TIM2_CCR1L=0x60;

中断使能寄存器,如果需要中断可以在此设置。
bit1:CC1E 捕获/比较1中断使能
0:CC1 中断不使能
1:CC1中断使能
TIM2_IER=0x00; //更新中断使能

控制寄存器,bit0控制计数器的打开和关闭。
bit0,计数器使能
0:不使能
1:使能
TIM2_CR1=bit0; //enable counter
通过逻辑分析仪测试PD4管脚的输出电平,波形图如下所示。

源码如下,
//*******************************************

1 #define bit0 0x01
2 #define bit1 0x02
3 #define bit2 0x04
4 #define bit3 0x08
5 #define bit4 0x10
6 #define bit5 0x20
7 #define bit6 0x40
8 #define bit7 0x80
9
10 void Timer2_Init(void)
11 {
12 CLK_ICKR|=0x01; //开启内部HSI
13 while(!(CLK_ICKR&0x02));//HSI准备就绪
14 CLK_SWR=0xe1; //HSI为主时钟源
15 CLK_CKDIVR=0x00; //HSI,8分频=16M
16 TIM2_PSCR=0x00; //分频值=0 16M
17 TIM2_ARRH=0x01; //自动重装的值 0x0100
18 TIM2_ARRL=0x00;
19 TIM2_CCER1=bit0|bit1; //low level,OC1
20
21 TIM2_CCMR1=bit3|bit5|bit6; //MODE
22 TIM2_CCR1H=0x00;
23 TIM2_CCR1L=0x60;
24 TIM2_IER=0x00; //更新中断使能
25
26 TIM2_CR1=bit0; //enable counter
27 }
28 int main( void )
29 {
30 Timer2_Init();
31 while(1){};
32 }

❽ STM8S的IO口同时用作输入和输出,怎么设置

这不管是什么语言来实现,方法是一样的,每组的每个IO引脚的属性(输入/输出)是可以配置的,每组IO口都有三个配置寄存器,通过对这一组寄存器写入配置的参数就行了。

❾ 如何创建cfg配置文件

使用命令行参数的 SQLIOSim.com 文件。
您运行 SQLIOSim.exe 文件后使用 文件和配置 对话框。
使用配置文件的 x 文件 部分。

热点内容
华为电脑服务器系统进不去提示 发布:2024-10-08 00:13:42 浏览:490
登录密码如何获取 发布:2024-10-07 23:58:40 浏览:424
王者荣耀人机脚本 发布:2024-10-07 23:58:33 浏览:807
地标建筑脚本 发布:2024-10-07 23:48:51 浏览:242
sqlorderby 发布:2024-10-07 23:42:13 浏览:958
qq秒源码 发布:2024-10-07 23:41:37 浏览:471
51单片机编译器 发布:2024-10-07 23:28:04 浏览:798
安卓手机陌陌封设备了怎么搞 发布:2024-10-07 23:17:00 浏览:180
sql管理系统代码 发布:2024-10-07 23:00:51 浏览:524
安卓什么浏览器可以打开 发布:2024-10-07 23:00:51 浏览:121