-
那请问你是否知道,如果Timer比较输出的某个通道未使能(CCER寄存器的CCxE=0),是不是Timer与相应的输出管脚就是断开的?
-
STM8的TIM1是16位高级控制定时器,作为新手不要急着玩高级功能,先从简单的定时溢出中断开始。那么这个简单的目标就定为LED1亮500ms,灭500ms,循环往复,如此而已。
#include <iostm8s207sb.h>
#define LED1_FLASH PD_ODR_ODR3 = !PD_ODR_ODR3 // 开发板上的LED1接在PD3上
void CLK_init(void)
{
CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M
}
void GPIO_init(void)
{
PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出
PD_CR1 = 0x08; // 设置PD3为推挽输出
}
void TIM1_init(void)
{
TIM1_PSCRH = 0x1F; // 8M系统时钟经预分频f=fck/(PSCR+1)
TIM1_PSCRL = 0x3F; // PSCR=0x1F3F,f=8M/(0x1F3F+1)=1000Hz,每个计数周期1ms
TIM1_ARRH = 0x01; // 自动重载寄存器ARR=0x01F4=500
TIM1_ARRL = 0xF4; // 每记数500次产生一次中断,即500ms
TIM1_IER = 0x01; // 允许更新中断
TIM1_CR1 = 0x01; // 计数器使能,开始计数
}
#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_OVR_UIF(void)
{
LED1_FLASH;
TIM1_SR1 = 0; // 清除更新中断标记,这步不能漏掉,否则会连续进入中断程序
}
void init_devices(void)
{
asm("sim"); // 关全局中断
CLK_init();
GPIO_init();
TIM1_init();
asm("rim"); // 开全局中断
}
void main( void )
{
init_devices();
// 主循环里没有程序需要执行
while(1);
}
好了,同样编译、下载、运行,看结果吧。
-
STLINK可以调试STM8L101的,你的原理图贴上来看看。
-
强
-
实用程序指南还比较有参考价值
-
我也遇到这个问题,就是安装到D盘上,也是提示没有权访问该目录!!!
-
这个 百度或GOOGLE上 应该有吧。
-
一般认为,"读端口"有"读引脚"和"读寄存器"两类操作.
汇编语言的"mov A,P0"或C的"if (P0==0x55)..."这样的代码将会读引脚,
而"ANL P0,#0FEH"或C的"P0 &= 0xfe"这样的代码会是读寄存器.
前者通常是直接引用端口的值,后者引用端口值并会将修改了的值写回去.
-
谢谢 分享了
-
谢谢了
-
碰到过这个问题,也看了微软那个方法,但是我那个BPS生成的SysgenSettings.out的集合反而大于了anchored.txt,没法继续。后来从网上找到另一个办法,先确保build、sysgen能通过,然后build SDK,出那个3 error(s)错误后,去找\Makesdk\platform.ini,应该有Sysgen=0,改成1,保存。然后用命令行生成SDK:
makesdk.com /inifile:platform.ini
这个方法是可用的。
猜想是不是sysgen和makesdk用的环境变量或者工程配置不完全一样,有的组件直接加进了BSP的BAT文件里。
-
楼主问题解决了吗?
是否是运行一段时间,跑死了,重启但是没起来,
楼主需要关注下2440的上电时序,看看12M晶振的参考电源是否供给上?
-
新年快乐.
新年快乐.
是不是开车回家?
-
up
-
谢谢!
-
引用 5 楼 cokeliu 的回复:
监视工控环境. 及wifi转can
工作环境怎样?比如说温度范围...
需求量了有多大?
-
我打的升级包是2008年全年的,是不是包括了07年关于SD卡部分的?
-
SQLite, 完全能达到你的要求
-
重启好像也会丢的哦。。。
-
btSfrValue = *((unsigned char data*)btSfrAddr ); // 这样不行
当然不行,编译器会不知道你的存储类型的.SFR在内部RAM的高端,但内部RAM的高端不只是SFR,还有IDATA区,访问SFR要用sfr关键字,否则会被认为是IDATA.