目录:

1.MM32F0020简介

2.MM32F0020的复位脚nRST和PA10的说明

3.MM32F0020的选项字节说明

4.MM32F0020的FLASH_OBR选项字节寄存器说明

5.MM32F0020对选项字节区块操作限制的解除与使能

6.MM32F0020对选项字节区块擦除的步骤

7.MM32F0020对选项字节区块编程步骤

8.MM32F0020的复位脚nRST复用成普通GPIO PA10功能

9.验证MM32F0020的复位脚nRST复用成普通GPIO PA10功能

提要:

  学习MM32F0020 的复位脚RST复用成普通GPIO PA10功能,并用PA10驱动LED灯翻转,即LED1 TOGGLE。要把nRST复位脚复用成普通GPIO PA10功能需配置用户选项字节的

OBR_nRST位7设置为0即可,注意完成选项字节配置后,需重新给MCU上电才生效。

  特别注意:MM32F0020的复位脚nRST在MCU内部是与PA10绑定的,因此在复用成普通GPIO PA10后,在上电后会从复位到复用的一个过程切换即PA10会有一个低电平到高电平

变化所以工程师要特别注意PA10管脚的应用,如果用在控制MOSFET管要注意避开!!!

内容:

1、MM32F0020简介

  (1)MM32F0020微控制器是基于Arm Cortex-M0内核,最高工作频率可达48MHz;

  (2)供电电压支持:2.0V - 5.5V;

  (3)多达32KB的Flash,2KB的SRAM;

  (4)1个I2C;

  (5)2个UART;

  (6)1个12位的共8通道的ADC;

  (7)1个I2C或I2S;

  (8)1个16位高级定时,1个16位通用定时器,1个16位基本定时器;

  (9)1个IWDG和一个WWDG看门狗。

2.MM32F0020的复位脚nRST和PA10的说明

  (1)MM32F0020的MCU有两种封装,即TSSOP20和QFN20,TSSOP20封装的复位脚nRST在MCU的第4脚,QFN20封装的复位脚nRST在MCU的第1脚分别如下图1和图2所示:

                              图1

                                   图2

  (2)必须特别强调MM32F0020的复位脚NRST在MCU内部是与PA10绑定的,因此在复用成普通GPIO PA10后,在上电后会从复位到复用的一个过程切换即PA10会有一个低电平到高电平变化,所以工程师要特别注意PA10管脚的应用,如果用在控制MOSFET管要注意避开;

  (3)MM32F0020的复位脚nRST复用成普通GPIO PA10功能是在FLASH_OBR选项字节寄存器的相关位设置的。

3.MM32F0020的选项字节说明

  (1)参考MM32F0020的UM手册嵌入式闪存章节,在选项字节页中,内容主要有写保护使能,看门狗使能等。 Flash 控制器可以通过选项字节中值的设置,达到使能主存储器禁止写入功能,以避免非法写入;还可以使能硬件看门狗。相关信息存储在选项字节中,修改选项字节中内容后,需要复位或重新上电后才生效,写入时需按反码方式写入,如 nUser, nData等。每次系统复位后,选项字节会重新装载选项字节信息块的数据,并做相应的判断与状态改变,这些状态保存在选项字节寄存器(FLASH_OBR 及 FLASH_WRPR)中。在信息块中每个选择位都有对应的反码位,在加载选择位时反码位用于验证选择位是否正确,如果在加载过程中发现有差别,将产生一个选项字节错误标志(OPTERR),如开启中断,将触发中断。选项字节块中选项字节的组织结构如下表所示:

(位 15 ∼ 8中的值为位 7 ∼ 0中选项字节 0 的反码):

  (2)如上表2-3选项字节组织结构可知:其中地址0x1FFFF800的nRDP是用于设置选项字节读保护相关,地址0x1FFFF802的nUSER是用户选项字节设置,用于设置外设相关

功能以及用户自定义选项字节设置。

  (3)用户nUSER选项字节的含义如下表所示,具体也可参考MM32F0020的UM手册。

  (3)从上表用户选项字节寄存器描述可知,要把nRST复位脚复用成普通GPIO PA10功能需配置用户选项字节的OBR_nRST位为0即可,注意完成选项字节配置后,需重新上电才生效。

4.MM32F0020的FLASH_OBR选项字节寄存器说明

  (1)如下表所示为MM32F0020的FLASH_OBR选项字节寄存器,要把nRST复位脚复用成普通GPIO PA10功能需配置用户选项字节的OBR_nRST位7设置为0即可,注意完成选项字节

配置后,需重新给MCU上电才生效。

  

5.MM32F0020对选项字节区块操作限制的解除与使能

  闪存控制器在复位后,它的选项字节区块默认是处于写保护的,并且任何时候都是可读的。同样是为了避免对选项字节区做块擦除和写值等破坏性操作,复位后, FLASH_CR 寄存器进入锁定状态,FLASH_CR 的 LOCK 位被控制器模块置为 1,而 OPTWRE 位被控制器模块清除为 0;因此需先后向FLASH_KEYR 寄存器写入 0x45670123 和 0xCDEF89AB 做解锁 FLASH 操作, FLASH_CR 的LOCK 位置为 0 后,才做选项字节区的解锁。通过向 FLASH_OPT_KEYR 寄存器先后写入 0x45670123和 0xCDEF89AB ,从而使硬件将 FLASH_CR 寄存器的 OPTWRE 位置 1,才能对选项字节区执行块擦除,半字编程操作。可将 FLASH_CR 寄存器的 OPTWRE 位置 0,从而禁止对选项字节区执行块擦除,半字编程操作。

  MM32F0020对选项字节区块操作限制的解除和使能如下代码所示:

(1)解锁FLASH

#define FLASH_KEY1  ((u32)0x45670123)
#define FLASH_KEY2 ((u32)0xCDEF89AB) void FLASH_Unlock(void)
{
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
}

(2)解锁选项字节区

void FLASH_OPTB_Enable(void)
{
FLASH->OPTKEYR = FLASH_KEY1;
FLASH->OPTKEYR = FLASH_KEY2;
}

(3)上锁FLASH

void FLASH_Lock(void)
{
FLASH->CR |= FLASH_CR_LOCK;
}

6.MM32F0020对选项字节区块擦除的步骤

  MM32F0020对选项字节区块擦除的步骤如下所示:

7.MM32F0020对选项字节区块编程步骤

  (1)选项字节区块的编程与主闪存块地址的编程不同,因其写入值复位后加载到配置选项,需要更加严格的保护。解除对闪存控制器的访问限制后,还需要对选项字节区块解除访问限制。完成该操作后,FLASH_CR 寄存器中的 OPTWRE 位会被置 1, 才能允许后续的编程操作。

  (2)选项字节有效数据为低 8 位,而高 8 位为低 8 位的反码,从而组成为 16 位数据。在编程过程中,软件将高 8 位设置为低 8 位的反码,保证选项字节的写入值总是对的,然后依次写入 16 位数据。当选项字节被改变时,需要系统上电复位使之生效。

  (3)MM32F0020对选项字节区块编程步骤如下所示:

8.MM32F0020的复位脚nRST复用成普通GPIO PA10功能

  MM32F0020的复位脚nRST复用成普通GPIO PA10功能代码如下所示:

//操作MM32F0020的先选字节把复位脚nRST复用成GPIO PA10功能,注意:因与复位脚共用MCU上电到复位成功后PA10默认高电平。
void Bsp_OPTB_Operation(void)
{
//Flash UnLock
FLASH_Unlock();
//Option Byte Erase
FLASH_EraseOptionBytes();
//写回0x5AA5
FLASH_ProgramOptionHalfWord(0x1FFFF800,0x5AA5);
#if(1)
//从UM手册的选项字节表可知nUSER用户选项字节的起始地址为0x1FFFF802
//PA10:RST复用为GPIO功能,选项字节低8位有效,高8位取低8位的反码写入,写入后MCU需重新上电后生效。
FLASH_ProgramOptionHalfWord(0x1FFFF802,0x20DF);
#else
//PA10:恢复为RST复位功能,选项字节低8位有效,高8位取低8位的反码写入,写入后MCU需重新上电后生效。
FLASH_ProgramOptionHalfWord(0x1FFFF802,0x00FF);
#endif
//Flash Lock
FLASH_Lock();
}

9.验证MM32F0020的复位脚RST复用成普通GPIO PA10功能

  (1)LED初始化函数代码如下所示:

#define LED1_ON()       GPIO_ResetBits(LED1_PORT,LED1_PIN)
#define LED1_OFF() GPIO_SetBits(LED1_PORT,LED1_PIN)
#define LED1_TOGGLE() (GPIO_ReadOutputDataBit(LED1_PORT,LED1_PIN))?(GPIO_ResetBits(LED1_PORT,LED1_PIN)):(GPIO_SetBits(LED1_PORT,LED1_PIN))
void Bsp_LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//Enable GPIOA Clock
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); //Init struct member with its default value.
GPIO_StructInit(&GPIO_InitStruct);
//PA1:LED1,PA7:LED2,PA9:LED3,PA11:LED4
GPIO_InitStruct.GPIO_Pin = LED1_PIN;
//GPIO Speed
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
//Push-pull output
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
//Initializes the gpio peripheral according to the specified parameters in the init struct.
GPIO_Init(LED1_PORT, &GPIO_InitStruct); //ON LED1
LED1_ON();
}

  (2)在main函数初始化中分别调用Systick初始化延时函数DELAY_Init();Bsp_OPTB_Operation();选项字节操作函数,把MM32F0020的复位脚nRST复用成普通GPIO PA10功能,然后调用LED初始化函数Bsp_LED_Init();

  (3)在while(1)主循环中调用PA10驱动LED1_TOGGLE();翻转,调用延时1000ms函数,编译程序,烧录程序到MCU,然后重新给MCU上电使得配置的选项字节生效即nRST复用成普通GPIO PA10功能生效,可观察到PA10驱动LED1_TOGGLE每1秒翻转一次,具体代码如下所示:

int main(void)
{
//Systick Init
DELAY_Init();
//操作MM32F0020的选项字节把复位脚nRST复用成GPIO PA10功能,注意:因PA10与复位脚nRST共用,MCU上电到复位成功后PA10默认为高电平。
Bsp_OPTB_Operation();
//LED GPIO Init
Bsp_LED_Init(); while(1)
{
//LED1Toggle
LED1_TOGGLE();
DELAY_Ms(1000);
}
}

(4)重新上电后也可进入调试界面调试,调试代码没有重复跑到初始化说明nRST复用成普通GPIO PA10设置成功。

总结:

  学习MM32F0020 的复位脚RST复用成普通GPIO PA10功能,并用PA10驱动LED灯翻转,即LED1 TOGGLE。要把nRST复位脚复用成普通GPIO PA10功能需配置用户选项字节的

OBR_nRST位7设置为0即可,注意完成选项字节配置后,需重新给MCU上电才生效。

  特别注意:MM32F0020的复位脚NRST在MCU内部是与PA10绑定的,因此在复用成普通GPIO PA10后,在上电后会从复位到复用的一个过程切换即PA10会有一个低电平到高电平

变化所以工程师要特别注意PA10管脚的应用,如果用在控制MOSFET管要注意避开!!!

注意事项:

  (1)MM32F0020的nRST复位脚复用成普通GPIO PA10功能需配置用户选项字节的OBR_nRST位7设置为0即可;

  (2)操作选项字节之前需对选项字节区块操作限制的解除与使能,即解锁FLASH和使能选项字节操作;

  (3)擦除选项字节后需在0x1FFFF800起始地址把0x5AA5重新写回到选项字节nRDP中;

  (4)编程用户选项字节的起始地址为0x1FFFF802;

  (5)选项字节有效数据为低 8 位,而高 8 位为低 8 位的反码,从而组成为 16 位数据。在编程过程中,软件将高 8 位设置为低 8 位的反码,保证选项字节的写入值总是对的,然后

      依次写入 16 位数据。当选项字节被改变时,需要系统上电复位使之生效。

  (6)特别注意:MM32F0020的复位脚NRST在MCU内部是与PA10绑定的,因此在复用成普通GPIO PA10后,在上电后会从复位到复用的一个过程切换即PA10会有一个低电平到高

电平变化所以工程师要特别注意PA10管脚的应用,如果用在控制MOSFET管要注意避开!!!

  

MM32F0140的复位脚nRST复用成普通GPIO PA10功能的更多相关文章

  1. stm32复位引脚NRST

    STM32F的NRST是异步复位脚. 当NRST输入低电平的时候,MCU处于复位状态,重设所有的内部寄存器,及片内几十KB的SRAM. 当NRST从低电平变高时,PC指针从0开始. 但是复位的时候不会 ...

  2. 关于springmvc下服务器文件打包成zip格式下载功能

    关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储   版权声明:本文为博主 ...

  3. mdm9607 gpio12~17改成普通gpio的方法

    qualcomm mdm9607的gpio12~gpio17定义如下: 现在如果想要设置GPIO_12~GPIO_17为普通GPIO口. 需要修改如下: 顺便附上qualcomm的说明: Remove ...

  4. imx6中iomux IO复用

    IOMUX Controller (IOMUXC) IO多路复用控制器1.overviewThe IOMUX Controller (IOMUXC), together with the IOMUX, ...

  5. 高通GPIO驱动(DTS方式)

    gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态: sysfs文件系统的建立可以参照下面的博 ...

  6. rp6818 和rp4418 重点修改的kernel几个问题!

    kernel\arch\arm\plat-s5p6818\drone\include文件下#define PAD_GPIOD1     (PAD_MODE_ALT | PAD_FUNC_ALT1 | ...

  7. MM32F0140 UART1 DMA RX and TX 中断接收和发送数据

    目录: 1.MM32F0140简介 2.DMA工作原理简介 3.初始化MM32F0140 UART1 4.配置MM32F0140 UART1 DMA接收 5.配置MM32F0140 UART1 DMA ...

  8. STM32管教复用与重映射关系

    摘自:http://blog.csdn.net/lincheng15/article/details/51789093 概括一下:复用就是一个引脚有几个功能,1.做普通IO输入输出 2.其他外设的输入 ...

  9. MM32F0140 UART1中断接收和UART1中断发送

    目录: 1.MM32F0140简介 2.初始化MM32F0140 UART1和NVIC中断 3.编写MM32F0140 UART1使能中断发送函数 4.编写MM32F0140 UART1中断接收和中断 ...

随机推荐

  1. 我是如何破解你的WINDOWS密码的 ?(2)

    介绍 在这个系类的第一部分中,我们揭示了windows创建和储存密码的机制.我们也涉猎了一点两种加密方法的弱点和破解的方法.在这系列的第二篇也是最后一篇文章中,我会实战用网上免费的工具一步一步的来破解 ...

  2. 突然发现,npm里request依赖包已经弃用,怎么办?

    摘要:在npm官网查看了request依赖包的当前状态,果然在2020年就被弃用了. 本文分享自华为云社区<npm里request依赖包已经弃用?致敬并调研替代方案!>,作者: gentl ...

  3. vue的事件监听

    <div id="app"> <button type="button" @click="btnClick(a,$event)&qu ...

  4. Wireshark教程之界面介绍

    实验目的 1.工具介绍 2.主要应用 实验原理 1.网络管理员用来解决网络问题 2.网络安全工程师用来检测安全隐患 3.开发人员用来测试执行情况 4.学习网络协议 实验内容 1.菜单栏选项介绍 2.快 ...

  5. Smartbi:利用好excel分析工具,数据分析都是小case!

    数据分析听起来好像很高端的样子,但是实际上在一些IT高手的眼里,只需要掌握以下几个excel数据分析小工具的使用,你也能够成为别人眼中的数据大神! 1.excel数据分析工具--条件格式 快速找出符合 ...

  6. 爬虫之爬取B站视频及破解知乎登录方法(进阶)

    今日内容概要 爬虫思路之破解知乎登录 爬虫思路之破解红薯网小说 爬取b站视频 Xpath选择器 MongoDB数据库 爬取b站视频 """ 爬取大的视频网站资源的时候,一 ...

  7. websocket原理和基于c/c++实现的websocket协议栈(更新中)

    参考: 博客1:http://blog.sina.com.cn/s/blog_bf397e780102w25k.html https://www.cnblogs.com/barrywxx/p/7412 ...

  8. List<T>去重复

    代码 class ListDistinctDemo { static void Main(string[] args) { List<Person> personList = new Li ...

  9. Windows原理深入学习系列-访问控制列表-关于安全描述符的补充

    这是[信安成长计划]的第 20 篇文章 0x00 目录 0x01 安全描述符的结构 0x02 两个结构的不同点 0x03 真正的查询方案 0x04 参考文章 0x01 安全描述符的结构 在上一篇文章中 ...

  10. C#控制台输入密码星号显示

    在Program类中的Main方法里: 1 public class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.Write ...