通过SWIM实现类似ST-LINK功能,给STM8下载
技术依赖:SWIM通信、FLASH操作、串口、DMA。 主要变成思路,通过串口实现命令行工具,再通过主机的swim进行slave烧录。其中串口数据的发送通过DMA接收。 SWIM通信之前有介绍,有需要可以查看,本文章主要介绍SWIM对STM8烧写时的思路。 一、直接通过WOTF进行烧写。 此方法确实可行,但是实际试验后发现,在烧写过程中由于WOTF的失败率导致烧写速度极慢。不建议采用。 二、让从机自己烧写flash 我们知道,在烧写flash时有块烧写。而且块烧写的程序时运行在RAM中的。我们可以利用这一特点,将编写好的flash 块烧写的程序(指定需要烧录数据的地址和需要烧录地址的地址)通过SWIM下载到从机RA
[单片机]
STM8学习笔记---利用PWM功能输出SPWM波
要生成SPWM波,其关键是要生成一组正弦规律变化的数字,然后将数字对应成PWM输出的占空比,按照顺序输出占空比就行。生成正弦波的方法在 使用C语言产生正弦波数据 这篇博客有详细说明,这里就不说了。 本例程中生成的64个数据是:50,54,59,64,69,73,77,81,85,88,91,94,96,97,99,99,100,99,99,97,96,94,91,88,85,81,77,73,69,64,59,54,50,45,40,35,30,26,22,18,14,11,8,5,3,2,0,0,0,0,0,2,3,5,8,11,14,18,22,26,30,35,40,45 它所组成的波形为 下面看C代码的实现
[单片机]
再造STM32---第十五部分:EXTI—外部中断/事件控制器
本章参考资料:《STM32F4xx 中文参考手册》系统配置控制器以及中断和事件章节。上一章节我们已经详细介绍了 NVIC,对 STM32F4xx 中断管理系统有个全局的了解,我们这章的内容是 NVIC 的实例应用,也是 STM32F4xx 控制器非常重要的一个资源。 学习本章时,配合《STM32F4xx 中文参考手册》系统配置控制器以及中断和事件章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。 特别说明,本书内容是以 STM32F42xxx 系列控制器资源讲解。 15.1 EXTI 简介: 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应
[单片机]
STM8 bootloader(boot和app皆可使用中断)
STM8 In Application Programming IAP编写的三个要点: 分析STM8启动过程和C运行时环境建立 规划bootloader和application以及各自向量表在内存中的分布 如何重定位STM8中断向量表 思路: 要编写IAP程序首先需要解决的问题是程序在运行过程中,当发生异常时,如何保证程序正常的跳转到相应的异常服务函数(不论程序是运行在bootloader还是application)。 但STM8没有类似NVIC之类的中断控制器管理中断向量的地址,STM8的向量表固定在0x008000,因此在IAP中需要重定位向量表来实现(为了bootLoader和application都可以使用中断,因
[单片机]
stm32外部中断进入不了的原因分析
最近几天折腾stm32,遇见了很郁闷的问题,外部中断进入不了,最后找到解决方法的时候觉得 唉,下面总结几条原因以便于大家少走弯路。 1.切记打开复用时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 2.最好加上一个EXTI_GenerateSWInterrupt(EXTI_LineX);产生软件中断便于判断是不是本来就配置错误; 3.开启硬件仿真: 4.正确设置中断向量地址: #if defined (VECT_TAB_RAM) /* Set the Vector Table base location at 0x20000000 */ NVIC_Se
[单片机]
STM8内部时钟切换
简介:在STM8内部有时钟切换功能,可以在需要时变换时钟的频率。板子为STM8_Discovery,LED为PD0。 程序如下: //功能:STM8的内部时钟分频切换 #include iostm8s105c6.h // 函数功能:延时函数 // 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ void DelayMS(unsigned int ms) { unsigned char i; while(ms != 0) { for(i=0;i 250;i++) { } for(i=0;i 75;i++) { } ms--; } } /
[单片机]
IAR for STM8 研究
最近移植了一个UCOSII到STM8L,先从编译器谈起。 由于IAR与VC++很像,所以直接就选用了它。 1. 函数参数传递 了解到它用了16个虚拟寄存器(也可以配置成12个)作为局部变量和函数参数传递。地址从0x00~0x0F。从MAP文件中可以看到。注意0地址是RAM的,所以函数中对指针的判断要特别注意。 从调试时反汇编的代码可以看到,C函数调用开始前都需要调用系统的一些函数用于保存参数,但在汇编里的函数就必须自己保存。比如中断回调函数: 汇编: PUBLIC _interrupt_29 //UART_TXE irq SECTION `.far_func.text`:CODE:NOROOT(0) _
[单片机]
关于51单片机“外部中断触发方式”的经验总结
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。 这个原理很好理解。但应用时需要特别注意的几点: 1) 电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行
[单片机]