STM8S903K3T6C基于IAR开发GPIO点灯示例
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM8S903K3T6C基于IAR开发GPIO点灯示例相关的知识,希望对你有一定的参考价值。
STM8S903K3T6C基于IAR开发GPIO点灯示例
- 📌相关篇《【开源电路】STM8S903K3T6C开发板》
📝本示例基于定时器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开发外部中断示例