本文目录一览

1,stm8单片机与stm32单片机的区别

stm8为8bit即8位单片机,每个存储单元最大为8位,为一个字节stm32为32位单片机,每个存储单元最大为32位,最小为8位

stm8单片机与stm32单片机的区别

2,关于STM8单片机

stm8_interrupt_vector.c 这个文件存放的是中断的定义,必须的。而IAR的中断是这样的#pragma vector=TIM4_OVR_UIF_vector__interrupt void TIM4_UPD_OVF_IRQHandler(void) ………………}可以写在*.c文件里。

关于STM8单片机

3,STM8中断怎么用

在stm8_interrupt_vector.c对应的中断入口的NonHandledInterrupt 改成你的中断函数名字。然后在stm8_interrupt_vector.c 这个文件加上extern @far @interrupt void 你的中断函数名字(void);就可以在 main.c里面用了 @far @interrupt void 你的中断函数名字(void)

STM8中断怎么用

4,STM8单片机如何使用

我前段时间刚搞过STM8,现在在搞STM32,如果你有51的基础STM8应该是很容易的,STM8跟AVR是很象的,同样要用IO口的是候要先初始化IO口,建议看一下《STM8S技术参考手册V4.pdf》主要了解个寄存器的作用!然后看一下STM8的库函数,了解一下就可以开始编程了!我这里给一个点亮一个灯的程序给你参考:#define LEDS_PORT (GPIOH)#define LED1_PIN (GPIO_PIN_3)void main(void) GPIO_Init(LEDS_PORT,LED1_PIN ,GPIO_MODE_OUT_PP_LOW_FAST); while (1) GPIO_WriteHigh(LEDS_PORT, Leds); }}这里利用了STM8库函数,记得把STM8的库包含进工程!

5,关于STM8单片机

函数体中的变量称为局部变量,编译器并不会给局部变量分配一个固定地址,一般是放在寄存器中,如果寄存器不够用的话,是放到堆栈中的.main()也是一个函数,所以你这种情况很有可能是你定义的局部变量被放到了寄存器中.可以看反汇编来确定有没有使用这个变量.你定义的变量,不管是局部变量还是全局变量,如果 你没有使用它,编译器在链接时会忽略掉该变量,这是编译器的优化策略,可以节省RAM.这种情况下你在仿真时完全看不到该变量.
stm8_interrupt_vector.c 这个文件存放的是中断的定义,必须的。而iar的中断是这样的#pragma vector=tim4_ovr_uif_vector__interrupt void tim4_upd_ovf_irqhandler(void) ………………}可以写在*.c文件里。

6,求STM8单次扫描模式的配置

*******************************************************************************function : stm8的ad初始化*******************************************************************************/void initad(void)adc2->cr1 = 0x40; //adc时钟=主时钟/8=2mhz,转换模式=单次,禁止adc转换adc2->cr2 = 0x00; //a/d结果数据左对齐//adc2->csr = 0x08;adc2->cr1 |= 0x01; //唤醒adc2->cr1 |= 0x01;}/*******************************************************************************function : 读取stm8的ad值*******************************************************************************/unsigned char readad(unsigned char channel)unsigned char x=0;adc2->csr = channel; //通道选择adc2->cr1 |= 0x01;while((adc2->csr & 0x80) == 0x00);adc2->csr &= 0x7f;x = adc2->drh;return (x);}刚刚调试完,调用就行
可以扫描模式啊,置位ADC_CR2的SCAN,然后配置CSR为扫描的最大通道,然后读取ADC_DBxRH/L寄存器,就可以了啊;我的这一段使用的是16M的内部时钟,扫描时还要delay一下,如果时钟慢的话好像可以省略掉一些delay ADC_CR1 = 0x02; ADC_CR2 = 0x0A; //右对齐 使能扫描模式; ADC_CSR = 0x03;ADC_CR1 |= 1; delay_us(10); // 由低功耗唤醒,必须有7us的延时后才能开始新的转换 ADC_CR1 |= 1; while(!(ADC_CSR | 0x80)); delay_us(10); temp = ADC_DB1RH; temp = (temp<<8) | ADC_DB1RL; *value = temp; delay_us(10); temp = ADC_DB2RH; temp = (temp<<8) | ADC_DB2RL; *(value+1) = temp; delay_us(10); temp = ADC_DB3RH; temp = (temp<<8) | ADC_DB3RL; *(value+2) = temp;

文章TAG:STM8  stm8单片机与stm32单片机的区别  
下一篇