已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
上面展示的,包括在片子自带的eeprom 0字节处读取/写入一个16位的整数。只需要用eeuint(0)就可以代表这个数,不需要复杂的指针操作等等。

每次上电,debug输出的数字就会加上1或者2,代表上电次数。

timer4是一个8位定时器,用标准固件库提供的初始化函数和设置函数很麻烦,这里直接用timer4(1ms)就能够让timer4开始计时,且每个毫秒中断一次。再用timer4()就可以知道timer4总共中断的次数,这样也就知道程序从开始到现在运行了多长时间。用一个模运算实现的状态机控制led的亮灭,即是每500毫秒,有250毫秒点亮led,250毫秒熄灭。

附上目前进度:

//stmduino.h

#include <stm8s.h>
#include <stm8s_tim1.h>
#include <stm8s_tim4.h>
#include <stm8s_clk.h>
#include <stm8s_gpio.h>
#include <stm8s_itc.h>
#include <stm8s_i2c.h>
#include <stm8s_exti.h>
//#include <stm8s_uart2.h>
#include <stm8s_uart1.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


#ifndef _STMDUINO_H__
#define _STMDUINO_H__

#define interrupts(state) INTERRUPTSTATE_##state
#define INTERRUPTSTATE_ enableInterrupts()
#define INTERRUPTSTATE_OFF disableInterrupts()
#define INTERRUPTSTATE_ON INTERRUPTSTATE_

#define PINBIT(x) ((GPIO_Pin_TypeDef)(1<<x))

#define HIGH (!LOW)
#define LOW 0

#define PORTOF_A1 GPIOA
#define PINOF_A1 PINBIT(1)
#define PORTOF_A2 GPIOA
#define PINOF_A2 PINBIT(2)

#define PORTOF_A3 GPIOA
#define PINOF_A3 PINBIT(3)
#define PORTOF_B4 GPIOB
#define PINOF_B4 PINBIT(4)
#define PORTOF_B5 GPIOB
#define PINOF_B5 PINBIT(5)

#define PORTOF_C3 GPIOC
#define PINOF_C3 PINBIT(3)
#define PORTOF_C4 GPIOC
#define PINOF_C4 PINBIT(4)
#define PORTOF_C5 GPIOC
#define PINOF_C5 PINBIT(5)
#define PORTOF_C6 GPIOC
#define PINOF_C6 PINBIT(6)
#define PORTOF_C7 GPIOC
#define PINOF_C7 PINBIT(7)

#define PORTOF_D3 GPIOD
#define PINOF_D3 PINBIT(3)
#define PORTOF_D4 GPIOD
#define PINOF_D4 PINBIT(4)
#define PORTOF_D5 GPIOD
#define PINOF_D5 PINBIT(5)
#define PORTOF_D6 GPIOD
#define PINOF_D6 PINBIT(6)
#define PORTOF_D1 GPIOD
#define PINOF_D1 PINBIT(1)
#define PORTOF_D2 GPIOD
#define PINOF_D2 PINBIT(2)

#define MODEOF_OUTPUTSHARP GPIO_MODE_OUT_PP_LOW_FAST
#define MODEOF_OUTPUT GPIO_MODE_OUT_PP_LOW_SLOW
#define MODEOF_INPUT GPIO_MODE_IN_PU_NO_IT
#define MODEOF_INPUTFL GPIO_MODE_IN_PU_NO_IT

#define pinMode(pin_to_set,mode_to_set) GPIO_Init(PORTOF_##pin_to_set,PINOF_##pin_to_set,MODEOF_##mode_to_set)
#define digitalWrite(pin_to_write,value_to_write) ((value_to_write==0)?GPIO_WriteLow(PORTOF_##pin_to_write,PINOF_##pin_to_write):GPIO_WriteHigh(PORTOF_##pin_to_write,PINOF_##pin_to_write))
#define digitalRead(pin_to_read) GPIO_ReadInputPin(PORTOF_##pin_to_read,PINOF_##pin_to_read))
#define pinHigh(pin_to_set) GPIO_WriteHigh(PORTOF_##pin_to_write,PINOF_##pin_to_write)
#define pinLow(pin_to_set) GPIO_WriteLow(PORTOF_##pin_to_write,PINOF_##pin_to_write)
#define pinFlip(pin_to_set) GPIO_WriteReverse(PORTOF_##pin_to_write,PINOF_##pin_to_write)

#define clock(cmd) CLOCK_##cmd
#define CLOCK_16M CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1)
#define CLOCK_8M CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2)
#define CLOCK_4M CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4)
#define CLOCK_2M CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8)
#define CLOCK_1M {CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV2);}

#define cpudivider(divider) CPUDIVIDER_##divider
#define CPUDIVIDER_1 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1)
#define CPUDIVIDER_2 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV2)
#define CPUDIVIDER_4 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV4)  //pwr saving if clock cpu down.
#define CPUDIVIDER_8 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV8)
#define CPUDIVIDER_16 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV16)
#define CPUDIVIDER_32 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV32)
#define CPUDIVIDER_64 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV64)
#define CPUDIVIDER_128 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV128)


#define flash(cmd) FLASH_##cmd
#define FLASH_EEPROM FLASH_Unlock(FLASH_MEMTYPE_DATA)
#define eeprom(offset) (offset+0x4000)
#define eewriteuint(value,offset) (eeint(offset)=value)
#define eereaduint(offset) eeint(offset)
#define eeuint(offset) (*(unsigned int*)(eeprom(offset)))
unsigned long timer4_ticks=0;
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
  //should timer4 tick every 1ms.
  timer4_ticks+=1;
  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);//always clear pending bit!!!
}

#define TIMER4_SET_1ms timer4clock(64,250)
#define TIMER4_SET_100us timer4clock(16,100)
#define TIMER4_STATE_COUNT TIM4_Cmd(ENABLE)
#define TIMER4_STATE_STOP TIM4_Cmd(DISABLE)
#define TIMER4_STATE_TICK TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE)
#define TIMER4_STATE_NOTICK TIM4_ITConfig(TIM4_IT_UPDATE,DISABLE)
#define TIMER4_STATE_ (timer4_ticks) //32bit counter

#define timer4tick(interval) TIMER4_SET_##interval
#define timer4clock(prescaler,counter) {TIM4_TimeBaseInit(TIM4_PRESCALER_##prescaler,counter);timer4(COUNT);timer4(TICK);}
#define timer4(state) TIMER4_STATE_##state

void assert_failed(u8* file, u32 line){while(1){}}

#endif
文号 / 541601

万流景仰
名片发私信
学术分 16
总主题 1270 帖总回复 8407 楼拥有证书:学者 机友 笔友
注册于 2008-03-29 15:34最后登录 2022-01-09 14:09
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步

个人简介

已走,勿送

文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传,正在处理中
空空如也~
处理中...
处理失败
加载中...
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
插入公式
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
ID: {{user.uid}}