这个你去看手册,去电气特性里面找,比如下面这个是stm32F060C6,写着5-20。像有的103是5-25以上,电容是是有计算步骤的,虽然20、22pf用的可能比较多,你看看你的是什么型号然后去找对应的原理图做参考。stm32有很多种,是有区别的。电容不能随便用。
用示波器测量,电容一般取20-30pf。
晶体振荡器是指从一块石英晶体上按一定方位角切下薄片(简称为晶片),石英晶体谐振器,简称为石英晶体或晶体、晶振;而在封装内部添加IC组成振荡电路的晶体元件称为晶体振荡器。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。
这样绝对不行!!!。。STM32因为我之前也是要接光耦,我是30路左右输出,30路左右输入,最后查手册发现STM32最大流入流出总电流貌似125ma,还是135ma我记不大清了,但是肯定是超了。。如果输入你设为上拉输入检测低电平60路倒是无所谓。。因为的光耦集电极电阻可以选1.5-2K的没多少电流。但输出的话必须要加驱动我是用了几个74HC245(每路可以提供20ma的驱动电流),244其实也可以,不过不如245 IO好接因为他是输入/输出在一边。PCB容易走线。而且还是按顺序来的。。
1首先我们都要初始化LED的配置。
void LEDInit()
GPIO_InitTypeDef GPIO_InitStructure; 。
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE); 。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; 。
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; 。
GPIO_Init(GPIOC, &GPIO_InitStructure); 。
}
10
11
12
13
14
10
11
12
13
14
现在第一种方法gpio寄存器实现等的亮灭。
2.GPIO寄存器
void LEDdisplay()。
{
u32 i,j;
//BSRR是一个32位数据寄存器,这里要初始化实所有灯灭。
GPIOC->BSRR=0xff;。
for(i=0;i<600000;i++) ;。
while (1)
{
for(j=0;j<1000000;j++);。
//把ODR寄存器里面都存入零,让所有灯亮一次。
GPIOC->ODR=0x00; 。
for(j=0;j<1000000;j++);。
//这里让所有灯灭掉
GPIOC->ODR=0xFF;。
for(j=0;j<1000000;j++);。
//这里是把第五个串口的Pin_5放进寄存器,让这个灯发光。
GPIOC->ODR ^= GPIO_Pin_5;。
}
10
11
12
13
14
15
16
17
18
19
20
21
22
10
11
12
13
14
15
16
17
18
19
20
21
22
在这个基础上可以进行修改
首先
这个是延迟0.6s大约
for(i=0;i<600000;i++) ;。
while (1)
{
for(i=0;i<8;i++)。
{
for(j=0;j<1000000;j++);。
//从0到7,没有设置BRR则BRR是默认亮灯,这是是循坏把灯调亮。
GPIOC->BRR=(1<<i); 。
//从0到7,设置BSRR为灭灯,这是是循坏把灯i的灯熄灭。
for(j=0;j<1000000;j++);。
GPIOC->BSRR=(1<<i);。
}
for(i=0;i<8;i++)。
{
for(j=0;j<1000000;j++);。
//统一让所有串口灯亮起来。
GPIOC->BRR=0x000000ff;。
//统一让所有串口灯亮起来。
for(j=0;j<1000000;j++);。
//设置BSRR寄存器。
GPIOC->BSRR=0x000000ff;。
}
10
11
12
13
14
15
16
17
18
19
20
21
22
23
10
11
12
13
14
15
16
17
18
19
20
21
22
23
第二种方法,函数法,
u32 i;
//把每个串口都设置成高电平,后面可以进行ResetBits直接可以把等亮起来。
GPIO_SetBits(GPIOC, GPIO_Pin_All); 。
GPIO_ResetBits(GPIOC, GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6); 。
for(i=0;i<600000;i++) ;。
while(1)
{
for(i=0;i<600000;i++) ;。
//写入GPIO接口,写入的灯会亮。
GPIO_Write(GPIOC, 0xfe); 。
for(i=0;i<600000;i++) ;。
GPIO_Write(GPIOC, 0xfd); 。
for(i=0;i<600000;i++) ;。
GPIO_Write(GPIOC, 0xfb); 。
for(i=0;i<600000;i++) ;。
GPIO_Write(GPIOC, 0xf7); 。
for(i=0;i<600000;i++) ;。
GPIO_Write(GPIOC, 0xef); 。
10
11
12
13
14
15
16
17
18
19
20
21
简单说
51是第一款大规模应用的单片机,资格最老,资源最多,入门简单。但是因为他推出的年代实在是太早了,上世纪50~60年代吧。很多架构和设计在现在看来不够完美。
比如说,中断的处理,比如说并不是所有的引脚都能外部中断等等。
基于51的缺陷,其他公司改进了工艺,比如90年代的AVR,21世纪的STM8。他们的功能比51强多了。可以说不论从能耗还是工艺还是编程难度上面都比51要好。
而STM32又不同了,现在ARM那么火,STM32就是基于ARM的32位单片机,功能更加强大,工具和资料也更加完善,当然成本也上升了一点点。
-------------
如果你是工作,你可以根据性价比,开发难度综合考虑。
如果是为了学习,可以先学51,主要是理解单片机的概念,等51玩的差不多了,就可以直接STM32。
纯手打,望采纳