关于在keil中进行stm32软件仿真的问题
将stm32I/O引脚引脚位绑定后,然后我对PA口的8引脚不断的给高电平,延时一段后,再给低电平。程序没有错误,但进行仿真时一直GPIO口的PA8引脚却一直是高电平,不知...
将stm32I/O引脚引脚位绑定后,然后我对PA口的8引脚不断的给高电平,延时一段后,再给低电平。程序没有错误,但进行仿真时一直GPIO口的PA8引脚却一直是高电平,不知道是怎么回事?程序如下:
#include"stm32f10x_lib.h"
#define uint unsigned int
#define GPIOA_ODR_A (GPIOA_BASE+0x0C)
#define GPIOA_IDR_A (GPIOA_BASE+0x08)
#define GPIOB_ODR_B (GPIOB_BASE+0x0C)
#define GPIOB_IDR_B (GPIOB_BASE+0x08)
#define GPIOC_ODR_C (GPIOC_BASE+0x0C)
#define GPIOC_IDR_C (GPIOC_BASE+0x08)
#define GPIOD_ODR_D (GPIOD_BASE+0x0C)
#define GPIOD_IDR_D (GPIOD_BASE+0x08)
#define GPIOE_ODR_E (GPIOE_BASE+0x0C)
#define GPIOE_IDR_E (GPIOE_BASE+0x08)
#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))
#define PAOut(n) BitBand(GPIOA_ODR_A,n)
#define PAIn(n) BitBand(GPIOA_IDR_A,n)
#define PBOut(n) BitBand(GPIOB_ODR_B,n)
#define PBIn(n) BitBand(GPIOB_IDR_B,n)
#define PCOut(n) BitBand(GPIOC_ODR_C,n)
#define PCIn(n) BitBand(GPIOC_IDR_C,n)
#define PDOut(n) BitBand(GPIOD_ODR_D,n)
#define PDIn(n) BitBand(GPIOD_IDR_D,n)
#define PEOut(n) BitBand(GPIOE_ODR_E,n)
#define PEIn(n) BitBand(GPIOE_IDR_E,n)
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
int main (void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIOA->CRH=0x3;
while(1)
{
PAOut(8)=1;
delayms(10000);
PAOut(8)=0;
}
}
软件仿真图片如下,PA8引脚一直置1,不知是什么原因? 展开
#include"stm32f10x_lib.h"
#define uint unsigned int
#define GPIOA_ODR_A (GPIOA_BASE+0x0C)
#define GPIOA_IDR_A (GPIOA_BASE+0x08)
#define GPIOB_ODR_B (GPIOB_BASE+0x0C)
#define GPIOB_IDR_B (GPIOB_BASE+0x08)
#define GPIOC_ODR_C (GPIOC_BASE+0x0C)
#define GPIOC_IDR_C (GPIOC_BASE+0x08)
#define GPIOD_ODR_D (GPIOD_BASE+0x0C)
#define GPIOD_IDR_D (GPIOD_BASE+0x08)
#define GPIOE_ODR_E (GPIOE_BASE+0x0C)
#define GPIOE_IDR_E (GPIOE_BASE+0x08)
#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))
#define PAOut(n) BitBand(GPIOA_ODR_A,n)
#define PAIn(n) BitBand(GPIOA_IDR_A,n)
#define PBOut(n) BitBand(GPIOB_ODR_B,n)
#define PBIn(n) BitBand(GPIOB_IDR_B,n)
#define PCOut(n) BitBand(GPIOC_ODR_C,n)
#define PCIn(n) BitBand(GPIOC_IDR_C,n)
#define PDOut(n) BitBand(GPIOD_ODR_D,n)
#define PDIn(n) BitBand(GPIOD_IDR_D,n)
#define PEOut(n) BitBand(GPIOE_ODR_E,n)
#define PEIn(n) BitBand(GPIOE_IDR_E,n)
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
int main (void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIOA->CRH=0x3;
while(1)
{
PAOut(8)=1;
delayms(10000);
PAOut(8)=0;
}
}
软件仿真图片如下,PA8引脚一直置1,不知是什么原因? 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
若以下回答无法解决问题,邀请你更新回答
1个回答
意法半导体(中国)投资有限公司
2023-06-12
展开全部
展开全部
根据我的经验不建议自己操作寄存器.最好用stm32的库函数进行操作!
更多追问追答
追问
问题不在于操作寄存器还是库函数,我用库函数试过也是出现这种情况。
追答
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//开GPIOC时钟
PC.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
PC.GPIO_Mode = GPIO_Mode_Out_PP;
PC.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &PC);
类似这样初始化..然后调用
GPIO_SetBits(GPIOC, GPIO_Pin_9);//GPIOC.9=1
GPIO_ResetBits(GPIOC, GPIO_Pin_9);//GPIOC.9=0
这样操作..
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询