学STM32对你来说有什么好处

发布者:电子设计艺术家最新更新时间:2020-06-03 来源: elecfans关键字:STM32  价格  单片机 手机看文章 扫描二维码
随时随地手机看文章

STM32是32位的单片机却只要八位单片机的价格,速度也是八位的好几倍。


更重要的是它作为ARM入门级的芯片比较容易掌握,网上资料也很多,很多人都在用。


STM32的IO端口有7个寄存器来控制,但是我们常用的就4个:CRL、CRH、IDR和ODR 。

端口配置低寄存器(GPIOx_CRL)

端口配置高寄存器(GPIOx_CRH)

端口输入数据寄存器(GPIOx_IDR)

端口输出数据寄存器(GPIOx_ODR)

其中CRL控制高8位的IO,CRH控制低8位的IO。这两个实质是一样的。


八种模式

对照AVR来GPIOx_CRL就相当于DDRx;GPIOx_ODR就相当于PORTx;GPIOx_ODR就相当于PINxSTM32的IO口;可以由软件配置成8种模式。

输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能、开漏复用功能。


简单的来说STM32的CRL寄存器可以设置输入、输出模式,还可以设置输出的最大速率。

输入浮空:既不是上拉也不是下拉输入。


常见控制方法

接下来要说两个常常听到的控制方法:直接操作寄存器和库函数方法。直接操作寄存器就是直接对CRL等寄存器写值。库函数是ST官方把所有的控制都写好了,我们只需要调用。


直接操作寄存器

GPIOA-CRH=0XFFFFFFF0;

GPIOA-CRH|=0X00000003;/PA8推挽输出

GPIOA-ODR|=18;/PA8输出高

库函数

GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12 ;

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;

GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;

GPIO_InitStruct.GPIO_Speed=GPIO_Speed_Level_3;

GPIO_Init(GPIOA,GPIO_InitStruct);

GPIO_SetBits(GPIOA,GPIO_Pin_11|GPIO_Pin_12 );

举个栗子

现在写一个LED的初始化程序。

直接操作寄存器

/LED IO初始化

void LED_Init(void)

{

RCC-APB2ENR|=12;/使能PORTA时钟

GPIOA-CRH=0XFFFFFFF0;/PA8推挽输出

GPIOA-CRH|=0X00000003;/速率

GPIOA-ODR|=18;/PA8输出高一开始高灭灯

}

注:先要使能PORTA时钟。

库函数

void LED_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;/声明结构体ST库

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/使能PA端口时钟

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;/LED0-PA.8端口配置

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,GPIO_InitStructure);/结构体初始化

GPIO_SetBits(GPIOA,GPIO_Pin_8);/PA.8输出高

}

到这两种方法的初始化都OK了。

main函数

int main(void)

{

SystemInit();

/系统时钟初始化为72M SYSCLK_FREQ_72MHz

delay_init(72);/延时函数初始化

NVIC_Configuration();/设置NVIC中断分组2:2位抢占优先级,2位响应优先级

LED_Init();/LED端口初始化

while(1)

{

LED0=0;/也可以使用(库)GPIO_ResetBits(GPIOA,GPIO_Pin_8);

/寄存器GPIOA-ODR=-(18);

delay_ms(300);

LED0=1;/也可以使用 GPIO_SetBits(GPIOA,GPIO_Pin_8);

/寄存器|GPIOA-ODR|=18;

delay_ms(300);

}

}


使能PORTA时钟,这里说明下STM32的时钟树和AVR51等有很大的区别,它每个外设都会有自己的时钟,要使用一个外设必须要先开外设的时钟。这样也一定程度上减少了功耗。

关键字:STM32  价格  单片机 引用地址:学STM32对你来说有什么好处

上一篇:基于单片机Stm32f103 DAC电流输出解决方案
下一篇:浅谈你不知道的STM32知识

推荐阅读最新更新时间:2024-11-11 13:32

STM32ADC使用方法解析
因项目需要使用到STM32的ADC功能,虽然对ADC的使用并不陌生,但是第一接触stm32的ADC功能还是有种无从下手的感觉,主要是因为STM32ADC设计较为复杂,一时对相关的专业术语较为生疏,此外固件库中涉及到的函数虽都进行了分门别类但是还是感觉函数较多,难以很快掌握,现就将个人理解写出,以便大家共同进步。 一、stm32 ADC特点 认识事物首先还是要从整体上把握,ADC也一样的道理,STM32的ADC外设提供了非常完善的功能,虽然其中很大一部分不见得能在项目中使用,但加深对其的认识对于合理利用其资源也是非常有必要的。 下面以项目采用的STM32L151为例,其他类型大同小异。参考RM0038 Reference
[单片机]
DRAM寡占阵营将面临价格压力?
   随着DRAM三大阵营的确立,今年DRAM各大阵营的获利与营收,都可说是连连报捷,这也使得在先进制程的投入也更加积极。但是否又会再次面临价格下跌的压力?答案似乎是有可能的。 根据TrendForce表示,今年以来DRAM市场一直呈现供货吃紧、价格持续走扬的市况来规划未来需求,DRAM厂纷纷决定自2014年第四季开始增加产能。按照DRAM厂现有的规划,2015年制程微缩与新增产能贡献产出年增率将逼近30%,现有的DRAM产业的寡占架构将面临重大挑战,若明年总体经济状况不如预期,此举恐怕导致DRAM供过于求的情况再现,压缩DRAM厂现有的获利空间。 TrendForce旗下记忆体储存事业处DRAMeXchange研究协理吴雅婷
[手机便携]
51单片机定时器与中断的程序设计
P2.0~P2.2 分别接上了独立按键 K0、K1、K2。 P1 接上了 8 个 LED,输出低电平时发光。 要求: 按下 K1 键,P1.7 输出周期为 1s 的方波; 按下 K2 键,P1 输出循环流水灯,每 2 个灯亮 0.5s; 按下 K0 键,停止方波和流水灯的输出。 ;----------------------------------------- ; ORG 0000H JMP START ORG 000BH ; JMP T0_INT T0_INT: MOV TH0, #(65536 - 50000) / 256 MOV TL0, #(65536 - 50000) MOD 256 DJNZ
[单片机]
51<font color='red'>单片机</font>定时器与中断的程序设计
单介绍51单片机的调试
对于一个新设计的电路板,调试起来往往会遇到一些困难,特别是当板比较大、元件比较多时,往往无从下手。但如果掌握好一套合理的调试方法,调试起来将会事半功倍。对于刚拿回来的新PCB板,我们首先要大概观察一下,板上是否存在问题,例如是否有明显的裂痕,有无短路、开路等现象。如果有必要的话,可以检查一下电源跟地线之间的电阻是否足够大。 然后就是安装元件了。相互独立的模块,如果您没有把握保证它们工作正常时,最好不要全部都装上,而是一部分一部分的装上(对于比较小的电路,可以一次全部装上),这样容易确定故障范围,免得到时遇到问题时,无从下手。一般来说,可以把电源部分先装好,然后就上电检测电源输出电压是否正常。如果在上电时您没有太大的把握(即使有
[单片机]
单片机第3课:共阳极数码管
这是共阳极数码管的电路图,其中JP3接到P0口,JP3的8-1对应数码管的a-dp引脚。 共阳极数码管的编码表如下,注意a---最低位,dp---最高位: 【0---3】0xco,0xf9,0xa4,0xb0, 【4---7】0x99,0x92,0x82,0xf8, 【8---B】0x80,0x90,0x88,0x83, 【C---F】0xc6,0xa1,0x86,0x8e。 C51程序显示数字0-9: #include reg51.h #define uchar unsigned char void delay(); uchar smg = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x
[单片机]
<font color='red'>单片机</font>第3课:共阳极数码管
基于stc单片机的AT89S52离线烧录器程序
下面是部分 源码 预览,完整的代码请到 http://www.51hei.com/bbs/dpj-20605-1.html 下载 #include uart.h #include s51pro.h #include myfun.h #include znfat/znFAT.h extern unsigned char OutBuf ; extern unsigned char InBuf ; unsigned char idata psignbuf ; unsigned char code_buf ; sfr P1M0 = 0x92; sfr P1M1 = 0x91; //定义STC12单片机IO模式特殊
[单片机]
基于stc<font color='red'>单片机</font>的AT89S52离线烧录器程序
STM32入门-时钟篇
STM32中使用任何一个外设都必须打开相应的时钟。在STM32中有5个时钟源可供用户选择: 1.HSI高速内部时钟,RC震荡器,频率为8MHz。 2.HSE高速外部时钟,右英/陶瓷谐振器,或着外部时钟源,4MHz-16MHz. 3.LSI内部低速时钟,RC震荡器频率为40Hz。 4.LSE外部低速时钟,接频率为32.768KHz的石英晶体。 5.PLL锁相环频输出,时钟源可选为HIS/2、HSE或HSE/2。倍频可选2-16倍,但其输出频率最大不能超过72MHz。 系统时钟SYSCLK,它是供STM32中绝大部分器件工作的时钟源,系统时钟可选择为PLL输出、HSI或者HSE。系统时钟的做大频率为72MHz,它通过AHB分频器分频后
[单片机]
51单片机~运放控制声控电路,运算放大器
(一)驻极体话筒: (二)运算放大器: 说明:在使用时V+和V-之间没有压差不进行电路放大,但是一旦有了压差,就成为运算放大器, (1)单电源:V+ V-时,输出1(输出电压是1所代表的VCC(VCC是多少伏就输出多少伏)),V+ V-时,输出0,就是输出0V。 (2)双电源时:输出所接正电压和伏电压(正负分别代表1和0) (3)负反馈: (4)运算放大器乘法运算~同向比例放大器: 解释:1. 当负反馈电路接上时,Vout的输出电压(就是Vout到接地的电路电压)Vout==VRF+VR1,由于负反馈接在V-,所以可以使用电流求电压。 2. 由于运放使用时有虚短和续断,所以V+和V-无电流流入,且V+
[单片机]
51<font color='red'>单片机</font>~运放控制声控电路,运算放大器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved