一、STM32单片机和51单片机的差别?
1.单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件。
2.STM32单片机则是ST(意法半导体)公司使用arm公司的cortex-M3为核心生产的32bit系列的单片机,他的内部资源(寄存器和外设功能)较8051、AVR和PIC都要多的多,基本上接近于计算机的CPU了,适用于手机、路由器等等。
3.下面分六个方面对比一下:
1、内核:51单片机采用的是51 Core,8Bit@2MHz Max(分频后),0.06DMIPS;STM32采用的是ARM Cortex-M3,32Bit@72MHz ,1.25DMIPS
2、地址空间:51单片机只有64KB;STM32有4GB
3、片上储存器:51单片机ROM只有2K-64K,RAM仅为128B-1K;STM32的ROM为20K-1MB,RAM有8K-256K;
4、外设:51单片机仅有三个定时器和一个串口;STM32却拥有AD,DA,Timer,WWDG,IWDG,CRC,DMA,IIC,SPI,USART等众多外设
5、开发工具:51单片机采用的是早期的UV2;而STM32使用的是UV4,甚至更高
6、操作系统:51单片机连RTOS都很难能跑;STM32支持uClinux,uC/OS
总的来说51轻巧 ,STM32强大。 首先51是入门最简单, 相对来说好学, 功能少 ,控制比较方便。但是速度 、功能都没有STM32强大 ,STM32是32bit的, 外围接口丰富, 但是入门就有点难度了。 再就是51的速度能快点 ,但是毕竟是8bit的, 51大多是冯诺依曼结构 ,STM32是哈弗结构的, 数据处理起来很快。
二、在32位单片机中,0x0000 0000,表示32位,即每一个0表示4位,前面16位,表示0-15,后面16位,表示16-31.
三、WWDG,IWDG浅析
IWDG是最常见的看门狗,到时间不喂狗,狗就咬人;WWDG是窗口看门狗,你要在合适的时间段喂狗,喂早了,咬你,喂晚了,咬你。
四、STM32F103RCT6 LQFP64
103表示ARM Cortex-M3内核,R表示64管脚,C表示大容量256KB flash,T表示LQFP封装,6表示-40℃-85℃;(工业级)
五、STM32F1和STM32F4区别
F1是Crotex M3内核,F4采用Crotex M4内核。
F1最高主频 72MHz, F4最高主频168MHz。
F1最多可提供5个UART串口,F4最多可以提供6个UART串口。
F1可提供2个I2C接口(一般是EEPROM、BMA250E三轴传感器),F4可以提供3个I2C接口。
F1的SPI时钟最高速度为 18MHz, F4可以到37.5MHz。
六、逻辑分析仪
一种类似于示波器的波形测试设备,通过采集指定的信号,并通过图形或者数据统计化的方式展示给开发人员,开发人员通过这些图形化时序信号按照协议来分析硬件或者软件中的错误。 一般用来调试I2C、USART、SPI。
七、问题解析
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
void getmemory(char *p)
{
p = (char *)malloc(100);
strcpy(p,"hello world");
}
int main()
{
char *str = NULL;
getmemory(str);
printf("%s/n",str);
printf("\n");
free(str);
return 0;
}
/*
编译结果:
ubuntu@ubuntu:/mnt/hgfs/winshare$ ./a.out
(null)/n
原因:getmemory(str)传入不是str的地址,并没有改变str的指向值,所以打印的str是个空值。
“/n”也写反了,如果要实现换行,应该是“\n”
*/
八、
#include<stdio.h>
#include <stdlib.h>
int main()
{
char str[] = "hello";
char *p = str;
void *q = malloc(100);
printf("%d, %d ,%d",sizeof(str),sizeof(p),sizeof(q));
printf("\n");
}
/*
编译结果:
ubuntu@ubuntu:/mnt/hgfs/winshare$ ./a.out
6, 4 ,4
*/
十、
#include<stdio.h>
int main()
{
unsigned char z = 0;
unsigned char x = 100;//32位系统char类型最大是256
unsigned char y = 10;
//z = (~x);//十进制是155
//z = (x|y);//十进制是110
z = (~x)*(x|y);//155*110=17050, 17050%256=154
printf("%d\n",z);
}
/*
考点:十进制和二进制相互转换,反码,逻辑运算
编译结果:
154
*/