想學習使用暫存器輸出點亮發光管,在main函式最后四句提示要指標,哪里調整
#include "stm32f10x_gpio.h"
//#include "stm32f10x.h"
int main()
{
RCC_APB2ENR |=(1<<5);
GPIOD_CRL &=~(0x0F<<4*6);
GPIOD_CRL |=(1<<24);
GPIOD_ODR |=(1<<6);
//RCC_APB2ENR |=(1<<4);
//GPIOC_CRL &=~(0x0F<<4*6);
//GPIOC_CRL |=(1<<4*6);
//GPIOC_ODR |=(1<<6);
RCC->APB2ENR |=(1<<4);
GPIOC->CR &=~(0x0F<<4*6);
GPIOC->CR |=(1<<4*6);
GPIOC->ODR |=(1<<6);
}
#define RCC_APB2ENR *(unsigned int *)0x40021018
#define GPIOD_CRL *(unsigned int *)0x40011400
#define GPIOD_ODR *(unsigned int *)0x4001140C //PD6亮燈
//#define GPIOC_CRL *(unsigned int *)0x40011000
//#define GPIOC_ODR *(unsigned int *)0x4001100C
typedef unsigned int uint32_t;
#define PERIPH_BASE 0x40000000
#define APB2PERIPH_BASE (PERIPH_BASE+0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE+0x20000) //總線地址變數定義
#define GPIOC_BASE APB2PERIPH_BASE+0x1000
#define GPIOC_CRL *(unsigned int *)(GPIOC_BASE+0x00)
#define GPIOC_ODR *(unsigned int *)(GPIOC_BASE+0x0C) //埠C地址變數定義
typedef struct
{
uint32_t CRL;
uint32_t CRH;
uint32_t ODR;
}GPIO_TypeDef;
#define RCC_BASE (AHBPERIPH_BASE+0x1000)
#define RCC_AHBENR *(unsigned int *)(RCC_BASE+0x18)
typedef struct
{
uint32_t CR;
uint32_t APB2ENR;
}RCC_TypeDef;
#define RCC ((GPIO_TypeDef*)RCC_BASE)
#define GPIOC (GPIO_TypeDef*)GPIOC_BASE
uj5u.com熱心網友回復:
哪位路過的兄臺給看下唄uj5u.com熱心網友回復:
沒看出什么問題,是不是include的檔案不對uj5u.com熱心網友回復:
int main(void)keil的arm編程就是這個德行
uj5u.com熱心網友回復:
目前情況,在沒用結構體前,編譯可以正常輸出亮燈。把最后四句改動成下面的樣子,編譯就不報錯,但執行了沒結果
(*RCC).APB2ENR |=(1<<4);
(*GPIOC).CRL &=~(0x0F<<4*6);
(*GPIOC).CRL |=(1<<4*6);
(*GPIOC).ODR |=(1<<6);
uj5u.com熱心網友回復:
自己找到了問題的地方,#define GPIOC (GPIO_TypeDef*)GPIOC_BASE沒有小括號,加上就不會有要求指標錯誤,沒有輸出因為結構體成員沒有按照手冊按順序添加,使結構體的地址不夠,呼叫時地址對應錯誤,按照順序添加上后,編譯輸出正常。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/33816.html
標籤:單片機/工控
上一篇:JS 多載父頁面
