❶ STM8S103K3,ST的8位单片机,寄存器的位操作
在IAR里面先是用了结构体struct的位域定义一个字节的八位,然后再用联合体union定义两个变量,一个unsigned char NAME用于全局操作,一个BIT_STRUCT NAME ## _bit用于位操作。如果还不明白,请先了解结构体与联合体。
❷ STM8的初始化里面 while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE)这个什么意思
首先,你要明白STM8的驱动时钟可以采用外部晶振,也可采用STM8内部的RC振荡器,二者只能选其一。三个语句中的HSI表明是采用内部RC振荡器。
你先看STM8内部的时钟树结构:
看到了吗?它是表明时钟准备好了没有的状态标志,就像你去叫别人办事,别人要经过考虑,这就需要等待,同理,你在STM8S内部配置好了时钟后,内部需要产生一定的延迟,而且受各种状况的影响,比如外部供电电压变化、引脚干扰等,有可能导致配置时钟失败,这就要经过查询这个寄存器的值来看是否配置好时钟没有,如果这个寄存器不等于0,则配置成功,否则失败。第三句的while里的意思就是不断地取CMSR的值,看是否等于宏定义CLK_SOURCE_HSI(OXE1),如果相等了,则跳过循环,继续执行以后的语句。
❸ 求STM8S家族的微控制芯片的 中文的 编程手册(pm0044)
同问,希望朋友们提供[email protected]
❹ 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;
}
❺ STM8寄存器配置
1、Ox应该为i额0x
2、头文件是否包含?没有包含应包含,PD_DDR 等寄存器没有定义。
❻ 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;
}
}
}
❼ stm8硬件手册去哪下载
stm8硬件手册去ST官网下载。
STM8s系列是意法半导体公司生产的8位的单片机。
❽ STM8的C语言延时及外部中断编程
研究了下,你描述的逻辑好像有矛盾,
我疑问如下:
控制过程如下:
pin17(PC7)收到低电平脉冲信号(脉冲长度多少?),
计时器启动(计数时间5秒?),
pin19(PD2)输出高电平(在计数计数结束后输出低电平?);
当m为奇数时,pin13(PC3)输出高电平(PIN14输出低电平?);
当m为偶数时,pin14(PC4)输出高电平(PIN13输出低电平?)。
最终计数结束后输出状态如何?
pin10(PA3)有高电平脉冲信号输入时(脉冲长度多少?),
pin19(PD2)停止输出(输出低电平还是高电平?);
如果在一个计时周期内(5秒吗?),
pin10(PA3)没有高电平信号输入(一直维持低电平吗?),
则pin18(PD1)输出高电平(有高电平脉冲信号时输出低电平?)。
pin15(PC5)有高电平脉冲信号输入时(脉冲长度多少?),
pin13(PC3)停止输出(输出低电平还是高电平?);
如果在一个计时周期内(5秒吗?),
pin15(PC5)没有高电平信号输入(一直维持低电平吗?),
且计数器值m为奇数,则pin18(PD1)输出高电平(m是偶数时怎么处理?)。
。。。。。。。。。。。
主要程序到底是触发后输出一个序列电平还是测量输入脉冲?
❾ stm8s芯片的按键检查程序怎么写啊我写的按键是芯片没反应,望高手给给调试成功的程序参考下
首先,按键的硬件电路,按键不按的时候常高或者常低,按钮按下产生1个跳变,下降沿或者上升沿。
然后,软件部分,将这个IO口配置为输入模式,带中断功能,再然后编写中断事件即可,比如让一个LED灯亮,或者串口输出。
有问题可以用ST-LINK连接看看,Debug可以单步运行查看进度的,比51的年代强太多了
❿ 如何对STM8S的闪存存储器和数据EEPROM编程
1.选项字节的概念(参考stm8s中文数据手册):
选项字节包括芯片硬件特性的配置和存储器的保护信息,这些字节保存在存储器中一个专用的
块内。除了ROP(读出保护)字节,每个选项字节必须被保存两次,一个是通常的格式(OPTx)和
一个用来备份的互补格式(NOPTx)。可以在ICP模式(通过SWIM)下访问下表中EEPROM的地址来修改选项字节。
选项字节也可以通过应用程序在IAP模式下修改,但是ROP选项只能在ICP模式(通过SWIM)下被
修改。
2.ISP IAP ICP的概念(有待学习):
ISP:In System Programing, 在系统编程 程序完全下载
IAP:In applicating Programing,在应用编程 我的理解是用应用程序去修改芯片里边固定的一些数据(与应用编程无关的数据)
ICP:In Circuit Programing, 在电路编程
3.stm8s芯片的备用功能重映射:
stm8s芯片上带有很多备用的功能,这些功能必须使用重映射功能才能实现,
重映射其实就是配置某个flash地址的某一位,使某个引脚具备备用功能或者默认功能的其中一个
而且一旦功能改,想恢复原来的功能必须重新写入。
比如stm8s的PD4端口具有TIM2_CH1 功能和BEEP功能,默认的情况下是TIM2_CH1功能,
当我们要用到BEEP功能时必须写选项字,将这个引脚重映射为BEEP功能。