历史上的今天
今天是:2025年06月02日(星期一)
2018年06月02日 | stm8 点亮第一个LED
2018-06-02 来源:eefocus
第一步:配置时钟
上一讲的程序点亮LED灯并没有设置stm8的时钟,但是LED灯依然可以正常闪烁。为使系统快速启动,复位后时钟控制器自动使用HSI的8分频(HSI/8)做为主时钟。因为HSI的稳定时间短,而8分频可保证系统在较差的VDD条件下安全启动。
一旦主时钟源稳定,用户程序可将主时钟切换到另外的时钟源。
果然一个厂家的,和stm32差不多。
stm8主时钟有四种时钟源:
● 1-24MHz高速外部晶体振荡器(HSE)
● 最大24MHz高速外部时钟信号(HSE user-ext)
● 16MHz高速内部RC振荡器(HSI)
● 128KHz低速内部RC(LSI)
各个时钟源可单独打开或关闭,从而优化功耗。
时钟相关寄存器:
内部时钟寄存器CLK_ICKR中的标志位HSIRDY用以指示HSI RC是否稳定。启动时, HSI时钟信号将不会生效直至此标志位被硬件置位。
HSI RC可通过设置内部时钟寄存器CLK_ICKR中的HSIEN位打开或关闭。
void System_Init(void)
{
CLK_SWR = 0xE1; //选择高速内部时钟HSI为主时钟 可不要这话
CLK_ICKR |= 0x01; //高速内部HSI时钟使能
while(!(CLK_ICKR&0x03)); //等待内部高速HSI就绪
CLK_CKDIVR = 0x18; // Fhsi = Fhsi = Fcpu = Fmaster = 2MHz
}
这里是选择HSI 8分频后作为系统主时钟。
第二步:配置GPIO
通用输入/输出口用于芯片和外部进行数据传输。一个IO端口可以包括多达8个引脚,每个引脚可以被独立编程作为数字输入或者数字输出口。另外部分口还可能会有如模拟输入,外部中断,片上外设的输入/输出等复用功能。但是在同一时刻仅有一个复用功能可以映射到引脚上。复用功能的映射是通过选项字节控制的。请参考数据手册关于选项字节的描述。每个端口都分配有一个输出数据寄存器,一个输入引脚寄存器,一个数据方向寄存器,一个选择寄存器,和一个配置寄存器。一个I/O口工作在输入还是输出是取决于该口的数据方向寄存器。
每一个端口都有一个输出数据寄存器 (ODR),一个引脚输入寄存器 (IDR)和一个数据方向寄存器(DDR) 总是同相关的。控制寄存器1(CR1)和控制寄存器2(CR2)用于对输入/输出进行配置。
任何一个I/O引脚可以通过对DDR,ODR,CR1 和CR2寄存器的相应位进行编程来配置。
寄存器中的位n对应于口的引脚 n 。
设置PE5为推挽输出,最大速度10MHZ。
void Gpio_Init(void)
{
PE_DDR |= 0x20; //PE5设置为输出
PE_CR1 |= 0x20; //PE5设置为推挽输出
PE_CR2 |= 0x20; //最大输出速度10MHz
}
至此关于stm8的时钟和LED连接的GPIO口配置完毕,就可以开始写主函数了。
int main( void )
{
int i,j;
System_Init(); //初始化系统时钟
Gpio_Init(); //PE5的GPIO口初始化
while (1)
{
PE_ODR ^= 0x20; //PE5取反
for(i=0;i<100;i++) //延时
for(j=0;j<1000;j++);
}
}
最后编译--下载仿真,按下键盘F5健,LED灯开始闪烁了,那么成功点亮第一个LED 。
史海拾趣
|
本人初学驱动开发 照着例子写了个简单的GPIO驱动 控制开发板上的LED 可是动态加载驱动后显示错误 过程如下: 硬件:s3c2440开发板 GPB5-8接4个LED 软件:linux-2.6.29内核 arm-linux-gcc- ...… 查看全部问答> |
|
模拟信号都好采集,但是有的传感器是BCD码输出的,每个传感器的引脚是24条线输出,有4个,请问怎么设计和选型? 这里面可能要用到数据选择器或者寄存器;还有USB控制器… 查看全部问答> |
|
nand flash驱动unable to mount partition 我的nand flash驱动加载时可以创建分区,也可以找到对应的文件系统驱动,但却无法mount这个分区,所以也出现不了盘符,请大家帮帮忙啊~~… 查看全部问答> |
|
我的手机有一个摄像头,而且可以以USB接口连接到桌面计算机上,作为摄像头使用。请问怎样在WinCE设备里也可以这样用呢?需要怎样开发相关驱动?… 查看全部问答> |
|
VS2005调试目标机上应用程序时,用TCP/IP方式连接总是“设备未就绪”?? 使用VS2005开发win ce的应用程序,在调试的时间用TCP/IP方式连接到开发板,老说“设备未就绪”,该怎么解决啊?… 查看全部问答> |
|
请教,我用ads1.2编译c++程序总是报一些头文件找不到,我把system path加了vc的库,结果有出了“only win32 and Mac supported\"这个问题,请问怎么办?ads1.2上可以编译c++吗?要怎么做? … 查看全部问答> |
|
#include #include \"sys.h\" #include \"delay.h\" #include \"7279.h\" unsigned char Keynum; /****************************************************************************** 函数名:7279_WriteByte 输 入:dat:一 ...… 查看全部问答> |




