0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

学STM32对你来说有什么好处

GReq_mcu168 来源:未知 作者:胡薇 2018-10-25 09:06 次阅读

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寄存器可以设置输入、输出模式,还可以设置输出的最大速率。

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

开漏模式和推挽模式:弱上拉和下拉电阻被禁止,开漏模式时,读输入数据寄存器时可得到I/O口状态,推挽模式时,读输出数据寄存器时可得到最后一次写的值,模拟输入配置。弱上拉和下拉电阻被禁止读取输入数据寄存器时数值为‘0’。

常见控制方法

接下来要说两个常常听到的控制方法:直接操作寄存器和库函数方法。直接操作寄存器就是直接对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等有很大的区别,它每个外设都会有自己的时钟,要使用一个外设必须要先开外设的时钟。这样也一定程度上减少了功耗。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632709
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354706

原文标题:为什么要学STM32?答案就在这里!

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    对于应用级的工程师来说FPGA应该注意什么?怎么?...

    对于应用级的工程师来说FPGA应该注意什么?怎么?学到那个层次?
    发表于 06-18 18:03

    教是最好的相信吗?

    的其他成员准备并做个培训。这种方式要比聘用外部培训师成本更低,同时还有其他一些好处。培训对于学员和讲师来说都有好处,可谓是一举两得。我记得在高中的心理学课上,老师告诉我说教是记住信息的最好方式(
    发表于 12-17 16:36

    STM32应用的范围哪些?STM32从哪开始比较好?

    STM32应用的范围哪些?STM32从哪开始比较好?
    发表于 10-18 22:43

    STM32好找工作,所以linux终究是错付了吗

    STM32的局限性不能说STM32不好,只能说局限性。STM32最大的局限性就是:它只是个单片机。也就是说,学习
    发表于 06-26 14:25

    STM32好找工作,所以linux终究是错付了吗

    STM32的局限性不能说STM32不好,只能说局限性。STM32最大的局限性就是:它只是个单片机。也就是说,学习
    发表于 07-11 10:46

    孩子单片机的好处

    孩子单片机的好处很多初学者有这样的困惑,单片机初学者感觉入门很难,学着学着,就会产生这样的疑问——自己辛辛苦苦学习单片机,将来有用吗?单片机只是一个工具,重要的还是思想,了自己
    发表于 07-16 07:05

    51单片机什么好处

    51单片机什么好处?开发板如何选购?
    发表于 07-23 13:32

    到底是STM32还是嵌入式linux

    01话 题经常有大学生同学纠结:我到底是STM32还是嵌入式linux。这个问题很多人都会有自己的看法,今天我试着从多个角度,把我了解到的事实讲一下,希望对大家有所启发。STM3202ST
    发表于 02-07 07:06

    stsw-stm32102讲解

    stsw-stm32102讲解,很好的资料下载吧。
    发表于 01-13 16:08 0次下载

    是先STM8 还是STM32

    是先STM8,还是STM32
    的头像 发表于 03-04 11:05 4141次阅读

    PCBA打样对整个生产什么好处

    PCBA打样对于整个生产来说什么好处?这里长科顺科技给您分析一下。
    发表于 08-27 09:27 867次阅读

    micropython支持stm32型号_先STM8,还是STM32

    STM32之间有些什么差异,包括MCU基本信息、开发难度、以及应用场景等。站在客观的角度来说,STM8比STM32学起来更容易,C语言功底还不错的朋友,直接上STM32也不是问题。从
    发表于 12-29 19:26 0次下载
    micropython支持<b class='flag-5'>stm32</b>型号_先<b class='flag-5'>学</b>STM8,还是<b class='flag-5'>学</b><b class='flag-5'>STM32</b>?

    micropython支持stm32型号_先STM8,还是STM32

    朋友问:我学习过51,接下来我是先学习STM8,还是STM32呢?01写在前面物联网STM32入门 - 直播课程 - 创客学院​www.makeru.com.cn想要明白这个问题,其实就需要明白
    发表于 12-31 19:28 1次下载
    micropython支持<b class='flag-5'>stm32</b>型号_先<b class='flag-5'>学</b>STM8,还是<b class='flag-5'>学</b><b class='flag-5'>STM32</b>?

    懂精通STM32的含金量吗?

    懂精通ARM的含金量吗?懂精通STM32的含金量吗?不管懂不懂都要懂,赶紧
    的头像 发表于 04-19 09:13 1693次阅读

    想在STM32 MCU上部署机器学习模型?这份入门教程,让就会~

    想在STM32 MCU上部署机器学习模型?这份入门教程,让就会~
    的头像 发表于 10-18 17:45 4330次阅读
    想在<b class='flag-5'>STM32</b> MCU上部署机器学习模型?这份入门教程,让<b class='flag-5'>你</b>一<b class='flag-5'>学</b>就会~