MiniSTM32的开发板
下载完程序后,DS0的红色LED灯就一直亮,按键没有反应。
求大神指点,谢谢。
[mw_shl_code=c,true]#include "stm32f10x.h"
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
//把“位带地址+位序号”转换别名地址宏
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
//把该地址转换成一个指针
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
//对地址的按位操作
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n)
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n)
void JTAG_Set(u8 mode)
{
u32 temp;
temp = mode;
temp <<= 25;
RCC->APB2ENR |= 1<<0;
AFIO->MAPR &= 0xF8FFFFFF;
AFIO->MAPR |= temp;
}
int main()
{
//RCC->APB2ENR |= 1<<2;
RCC->APB2ENR &= 0xFFFFFFF0;
RCC->APB2ENR |= 0x00000004; //使能GPIOA时钟
GPIOA->CRH &= 0xF0FFFFFF;
GPIOA->CRH |= 0x08000000; //设置按键KEY0 PA13上拉下拉输入
GPIOA->CRH &= 0xFFFFFFF0;
GPIOA->CRH |= 0x0000000B; //设置灯PA8 推挽输出 50MHz
while(1)
{
JTAG_Set(10);
if(PAin(13)==0) //判断PA13按键
{
GPIOA->ODR &= 0xFFFFF0FF;
GPIOA->ODR |= 0x00000100; //PA8输出高电平
// PAout(8) = 1;
}
else
{
GPIOA->ODR &= 0xFFFFF0FF;
GPIOA->ODR |= 0x00000000; //PA8输出低电平
}
}
}[/mw_shl_code]
|