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等有很大的区别,它每个外设都会有自己的时钟,要使用一个外设必须要先开外设的时钟。这样也一定程度上减少了功耗。

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

    关注

    5997

    文章

    43947

    浏览量

    620474
  • STM32
    +关注

    关注

    2239

    文章

    10663

    浏览量

    348464

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

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

收藏 人收藏

    评论

    相关推荐

    [讨论]为什么ARM?

    对操作系统几分熟?Linux和WinCE之争,对行业,对个人都有重大影响,是否好好思考过?当今世界,质量、成本是消费用户考虑的两大因素,在开发产品的时候,能立足于用户的利益,选择最合适、最具性价比的微处理器了么?一定要
    发表于 01-27 11:21

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

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

    新手求教,stm32必要背程序吗??求方法

    新手求教,stm32必要背程序吗??求方法
    发表于 11-12 21:00

    请问STM32f的吗?求指教?

    请问STM32f的吗?求指教?{:12:}
    发表于 09-02 22:50

    教是最好的相信吗?

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

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

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

    遇到问题,会去找VS会去问。?

    人活100,即使足百年,学到的东西也只是凤毛菱角,少之又少吧。何况还要需要把一些知识深、
    发表于 05-12 22:10

    请问ucos比裸奔什么好处

    我使用STM32已经一年了。做了两个项目,当然是裸奔的。从没接触过ucos。我想知道ucos什么好处,我感觉裸奔利用中断也能实现实时多任务呀?
    发表于 05-14 23:42

    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好?

    的几个问题,然后我们一起由问题切入进行一些讨论。问题1:我是单片机好还是直接STM32好???问题2:STM32如何才能快速入门?问题3:为什么是
    发表于 12-07 06:48

    stm32与传统的arm相比最大的好处是什么

    stm32f103的字、半字、字节是如何去定义的?stm32与传统的arm相比最大的好处是什么?
    发表于 12-15 06:54

    到底是STM32还是嵌入式linux

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