stm8 点亮第一个LED

第一步:配置时钟

上一讲的程序点亮LED灯并没有设置stm8的时钟,但是LED灯依然可以正常闪烁。为使系统快速启动,复位后时钟控制器自动使用HSI8分频(HSI/8)做为主时钟。因为HSI的稳定时间短,而8分频可保证系统在较差的VDD条件下安全启动。

一旦主时钟源稳定,用户程序可将主时钟切换到另外的时钟源。

stm8 点亮第一个LED_第1张图片

果然一个厂家的,和stm32差不多。

stm8主时钟有四种时钟源:

● 1-24MHz高速外部晶体振荡器(HSE)
● 最大24MHz高速外部时钟信号(HSE user-ext)
● 16MHz高速内部RC振荡器(HSI)
● 128KHz低速内部RC(LSI)
各个时钟源可单独打开或关闭,从而优化功耗。

时钟相关寄存器:

 stm8 点亮第一个LED_第2张图片

stm8 点亮第一个LED_第3张图片

内部时钟寄存器CLK_ICKR中的标志位HSIRDY用以指示HSI RC是否稳定。启动时, HSI时钟信号将不会生效直至此标志位被硬件置位。
HSI RC可通过设置内部时钟寄存器CLK_ICKR中的HSIEN位打开或关闭。

 stm8 点亮第一个LED_第4张图片

stm8 点亮第一个LED_第5张图片

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 。

 stm8 点亮第一个LED_第6张图片


stm8 点亮第一个LED_第7张图片

设置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 

stm8 点亮第一个LED_第8张图片

 

你可能感兴趣的:(硬件,单片机,IAR,点亮LED,stm8)