STM8S903K3T6C基于IAR开发GPIO点灯示例

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM8S903K3T6C基于IAR开发GPIO点灯示例相关的知识,希望对你有一定的参考价值。

STM8S903K3T6C基于IAR开发GPIO点灯示例


📝本示例基于定时器1定时,产生中断来控制闪烁间隔时间,led引脚在PD7上。

🌼点灯测序

/*---------------------STM8S903K3T6C核心板的GPIO点灯程序-------------------------*/

#include"iostm8s903k3.h"//头文件

void CLK_init(void)

//CLK_ECKR = 0x01; //开启外部时钟寄存器
//    CLK_SWR=0xb4; //HSE外部时钟源作为主时钟源
//    CLK_CKDIVR = 0x00;//如果选择外部时钟,则不分频8M
    CLK_ICKR |= 0X01; //使能内部高速时钟 HSI
     CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M 
    while(!(CLK_ICKR&0x02)); //HSI准备就绪
      CLK_SWR =0xE1;//HSI内部时钟源作为主时钟源(复位值)   



void GPIO_init(void)

    PD_DDR = (1<<7); // 配置PD端口的方向寄存器PD7输出
    PD_CR1 = (1<<7); // 设置PD7为推挽输出


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 = 0x03; // 自动重载寄存器ARR=0x01F4=500;0X03E8=1000
    TIM1_ARRL = 0xE8; // 每记数500次产生一次中断,即500ms
    TIM1_IER = 0x01; // 允许更新中断
    TIM1_CR1 = 0x01; // 计数器使能,开始计数


#pragma vector = TIM1_OVR_UIF_vector

__interrupt void TIM1_OVR_UIF(void)

    PD_ODR ^= (1<<7);//LED接在PD7上
    TIM1_SR1= 0x00; // 清除更新中断标记,这步不能漏掉,否则会连续进入中断程序


int main(void)

  CLK_init();
  GPIO_init();
  TIM1_init();
  asm("rim"); // 开全局中断
  while(1);

时钟源寄存器说明

  • CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M

  • RM0016_STM8S and STM8AF单片机参考手册:https://www.stmcu.com.cn/Designresource/detail/reference_manual/699498

以上是关于STM8S903K3T6C基于IAR开发GPIO点灯示例的主要内容,如果未能解决你的问题,请参考以下文章

STM8S903K3T6C基于ST Visual Develop开发串口数据收发示例

STM8S903K3T6C基于ST Visual Develop开发输入输出按键检测示例

STM8S903K3T6C基于ST Visual Develop开发外部中断示例

开源电路STM8S903K3T6C开发板

STM8S903K3基于ST Visual Develop开发定时器1中断示例

STM8S系列基于IAR开发串口中断接收和发送示例