|
本帖最后由 wambob 于 2015-1-26 15:40 编辑 看了网上视频的寄存器操作,又看了下072的参考手册还真和M3核不一样 GPIO口的时钟使能寄存器是AHBENR, 而GPIO口寄存器有4个32位的配置寄存器,分别是MODER,OTYPER,OSPEEDR,PUPDR. 2个32位的数据寄存器IDR和ODR. 1个32位的设置/复位寄存器BSRR. 1个32位的锁存器LCKR (PORA和PORTB). 2个复用选择寄存器AFRH 和AFRL(PORTA-PORTE). 072开发板上LED在PA5上; void LED_Init(void) { RCC->AHBENR|=1<<17; GPIOA->MODER&=0xfffff0ff; GPIOA->MODER|=0x00000400; GPIOA->OTYPER&=0xffffffef; GPIOA->OSPEEDR|=0x00000c00; } int main(void) { SystemInit(); LED_Init(); while(1) { GPIOA->ODR|=1<<5; Delay_Ms(500); GPIOA->ODR&=0xffffffcf; Delay_Ms(500); } } 比起库函数老说,是不是很精简 |
微信公众号
手机版
有工程包吗? 那些头文件需要被include? 这我还不熟
谢谢
有,传上去了
DEMO.rar
2015-1-26 22:43 上传
点击文件名下载附件
1.13 MB, 下载次数: 2
我先用 STM32CubeMX create 一個空的 STM32F429ZI Project(未规划任何Pins)
用Keil开启 Project
再将 wambob大大的 code 搬上 main.c
最后找出 LED pin 相關的暂存器即可
static unsigned char fac_us;
static unsigned int fac_ms;
void Delay_Init(unsigned char SYSCLK)
{
SysTick->CTRL&=0xFFFFFFFB;
fac_us=SYSCLK/8;
fac_ms=(unsigned int)fac_us*1000;
}
void delay_us(unsigned int nus)
{
unsigned long temp;
SysTick->LOAD=(unsigned long)nus*fac_us;
SysTick->VAL =0x00; //?????
SysTick->CTRL=0x01 ; //????
do
{
temp=SysTick->CTRL;
}
while((temp&0x01)&&!(temp&(1<<16)));//??????
SysTick->CTRL=0x00; //?????
SysTick->VAL =0X00; //?????
}
void delay_ms(unsigned int nms)
{
unsigned long temp;
SysTick->LOAD=(unsigned long)nms*fac_ms;
SysTick->VAL =0x00; //?????
SysTick->CTRL=0x01 ; //????
do
{
temp=SysTick->CTRL;
}
while((temp&0x01)&&!(temp&(1<<16)));//??????
SysTick->CTRL=0x00; //?????
SysTick->VAL =0X00; //?????
}
void LED_Init(void)
{
RCC->AHB1ENR|=0x40;//1<<17;
GPIOG->MODER&=0xf0ffffff;
GPIOG->MODER|=0x04000000; //怀堤
GPIOG->OTYPER&=0xffffffef; //芢侺
GPIOG->OSPEEDR|=0x00000c00; //詢厒
}
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* USER CODE BEGIN 3 */
/* Infinite loop */
Delay_Init(48);
LED_Init();
while (1)
{
GPIOG->ODR|=0x00002000;
delay_ms(1000);
GPIOG->ODR&=0xffffcfff;
delay_ms(1000);
}
/* USER CODE END 3 */
}
led2.zip
2015-1-27 00:32 上传
点击文件名下载附件
4.47 MB, 下载次数: 0
Project
支持digitalwrite
Delay_Init(48);
参数48是系统时钟,你可以改的,429的时钟是多少呢?
标准的是180M