-
程序已经ok啦!!移植的代码中有问题,谢谢各位
-
哦知道了
-
没听说STM8S解决了这样问题,据说ST的建议是系统时钟用内部RC,外部晶振只用来校准内部时钟。
-
#include "ioSTM8S207S8.h"
#include "Includes.h"
#include "Constants.h"
#include "Functions.h"
#include "Globals.h"
/* Author: EighthArmy @ July.2010 */
/*****************************************************
@Fn: ConfigTimer1()
@Br: 捕获TIM1CH1[PC1]引脚上按键产生的脉冲宽度.
@Pa: 无
@Rt: 无
@Sp: 无
* 时钟在CLK_PCKENR1中被关闭时所有设置不能写入到寄存器中.
* Timer1 是高级16位定时器.
* 向下计数能得到精确的时间长度值.
*****************************************************/
void ConfigTimer1( void ){
PC_DDR &= ~( 1 << PC1 ); /* 配置为输入口 */
PC_CR1 = ( 1 << C11 ); /* 配置上拉电阻 */
TIM1_PSCRH = ( 1 << PSC11 ) + ( 1 << PSC10 );
TIM1_PSCRL = ( 1 << PSC07 ) + ( 1 << PSC06 )
+ ( 1 << PSC05 ) + ( 1 << PSC02 )
+ ( 1 << PSC01 ) + ( 1 << PSC00 );
/* 分频率为PSCR[15:0] + 1 = 1000 */
TIM1_CNTRH = 0x46;
TIM1_CNTRL = 0x50;
TIM1_ARRH = 0x46;
TIM1_ARRL = 0x50;
/*
18,000,000
CNTR = ------------ = 0x4650
1,000
*/
TIM1_CR2 = 0; /* CC1输入管脚连到TIM1_CH1 */
TIM1_CCMR1 = ( 1 << CC1S00 ); /* 连接到TIM1_CH1引脚,无滤波,无分频 */
/* 注:CC1S仅在通道关闭时(TIM1_CCER1寄存器的CC1E=0)才是可写的. */
TIM1_CCER1 = ( 1 << CC1P ) /* 下降沿有效 */
+ ( 1 << CC1E ); /* 捕获使能 */
TIM1_SR1 &= ~( 1 << CC1IF ); /* 清除捕获标志 */
TIM1_SR2 &= ~( 1 << CC1OF ); /* 清除重复捕获标志 */
TIM1_IER = ( 1 << CC1IE ); /* 捕获中断使能 */
TIM1_CR1 = ( 1 << DIR ) /* 向下计数 */
+ ( 1 << CEN ); /* 使能计数 */
}
/*****************************************************
@Fn: CalculatePulseLen()
@Br: 计算脉冲的时间长度
@Pa: 无
@Rt: 无
@Sp: 无
*****************************************************/
void CalculatePulseLen( void ){
ulong Temp;
uchar Buff[7];
if( uiTenor & TM1_CAP_FLAG )
{
if( uiCaptureT1[0] <= uiCaptureT1[1] )
{
uiCaptureT1[0] += PRELOAD_VALUE_1S;
}
Temp = uiCaptureT1[0] - uiCaptureT1[1]; /* 捕获计数长度 */
/*
计算脉宽
脉冲时钟 clk = 捕获值 * 分频倍率
= i * 1000
脉冲时钟 11,995,575
t = ---------- = ------------ = 0.66642 s
系统时钟 18,000,000
*/
Temp = Temp * 1000;
Temp = Temp / 18; /* 放大1,000,000倍 */
Buff[6] = Temp % 10;
Temp /= 10;
Buff[5] = Temp % 10;
Temp /= 10;
Buff[4] = Temp % 10;
Temp /= 10;
Buff[3] = Temp % 10;
Temp /= 10;
Buff[2] = Temp % 10;
Temp /= 10;
Buff[1] = Temp % 10;
Temp /= 10;
Buff[0] = Temp % 10;
memcpy( &ucCapBuff[0], &Buff[0], SEVEN_LEN );
uiTenor &= ~TM1_CAP_FLAG;
}
free( Buff );
}
-
input capture
-
呵呵,感觉网上ST的文档资料有点乱,
端口驱动电流应该不成问题,因为我是直接去驱动MOSFET;
但“同一时间,三个引脚中只有一个引脚能作为输出引脚”这样的限制是否还成立,还是能像PA、PB口那样随意组合输出了,(因为考虑到成本及空间的问题,选择了STM32F103C8,手头上只有STM32F103RB的板子,产品上也用了STM32F103VE ,就是没有C8,要不然也可以测试下)
-
现在芯片涨价已经是炒作的了,他们炒不了多久了,像AVR价格疯涨,结果是用户纷纷改投别的MCU了,谁敢乱涨
-
那CR1寄存器的SWRST位在什么情形下用呢?
-
你最好用示波器看看信号线,置位了STOP位并不一定就能产生停止条件,具体要看但是信号线上的状态。
-
试试,顶顶
-
21# 版主
那个帖子当时是讨论预加载问题,对引脚配置并没有牵涉进去,所以程序并没有贴全。
/* Configure PE11 PE13 as GPIO_Mode_AF_PP */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_13;
...
既然这样,你让我看那个帖子有什么意义呢?
-
什么错误,也不说说 !
包含,又是如何包含法呢?
-
把2440或者6410的硬件I2C改成软件I2C, 方法是可行,只是有点浪费资源呀
-
SO,SCK, CS推挽输出
SI,上拉输入
-
-
关键在于恒流的形成原理,你还需要再多看看理论
-
引用 16 楼 ricky_hu 的回复:
前几天刚整理了一篇blog: 个人认为嵌入式驱动开发者所必须的几个能力
http://blog.eeworld.net/Ricky_hu/archive/2010/02/05/5291798.aspx
欢迎探讨!!
前辈的这篇博文 我很早就看了~可以看出确实是你们的切身体验~很好
-
有泄漏怎么会是正常的呢?
-
你可以启动explorer,但是把explorer的任务栏通过修改源代码让它宽度设置成0,或者是不创建任务栏就行了
-
看看