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
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值