介绍STM32F407位带操作方法,设置寄存器的偏移量,实现按GPIO口指定位进行读写操作,方便编程。
位段操作:实现51单片机中寄存器的操作方法。
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;
- }
- }
- }
-
-