介绍STM32F407位带操作方法,设置寄存器的偏移量,实现按GPIO口指定位进行读写操作,方便编程。
【1】位带操作配置说明
**位段操作:实现51单片机中寄存器的操作方法。 **
【2】源代码
Sys.c文件增加以下代码:
#include 'sys.h'
/*
函数功能:设置NVIC中断控制器优先级
函数形参:
IRQn_Type IRQn:中断线
uint32_t PreemptPriority:抢占优先级
uint32_t SubPriority:次优先级
*/
void SetNVICPriorityGrouping(IRQn_Type IRQn,uint32_t PreemptPriority, uint32_t SubPriority)
{
uint32_t Priority;
NVIC_SetPriorityGrouping(NVIC_PriorityGroup_2); //设置优先级分组,每个工程只能设置一次
Priority=NVIC_EncodePriority(NVIC_PriorityGroup_2,PreemptPriority,SubPriority); //编码优先级
NVIC_SetPriority(IRQn,Priority); //设置优先级
NVIC_EnableIRQ(IRQn);
}
Led.h 增加位带操作代码
#define LED0 PFout(9)
#define LED1 PFout(10)
#define BEEP PFout(8)
Key.h增加位带操作代码
#define KEY0 PEin(4)
#define KEY1 PEin(3)
#define KEY2 PEin(2)
#define KEY_UP PAin(0)
Main.c示例代码
#include 'stm32f4xx.h' // Device header
#include 'led.h'
#include 'delay.h'
#include 'key.h'
#include 'usart.h'
#include 'sys.h'
int main(void)
{
u8 i,key;
LED_Init();
KEY_Init();
USART1_Init(84,115200);
while(1)
{
key=ScanKeyVal(0);
if(key)
{
i=!i;
LED0=!LED0;
LED1=!LED1;
}
}
}