本帖最后由 any012 于 2016-6-4 16:16 编辑
感觉挺简单的,可就是在PA1脚输出不了波形。
单独控制PA1脚有定时器控制反转,没问题。
应该能排除硬件故障的问题。
想不出原因在哪?求助,自个看不出问题来...#include "stm32f10x.h"
- #include "stm32f10x.h"
- #include "gpio.h"
- int main(void)
- {
- GPIO_Config();
- while(1)
- {
- if(PA2() == 1)
- PA1(1);
- else
- PA1(0);
- }
- }
复制代码- #include "gpio.h"
- void GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- }
复制代码- #ifndef __GPIO_H_
- #define __GPIO_H_
- #include "stm32f10x.h"
- #define PA0(a) if(a)\
- GPIO_SetBits(GPIOA, GPIO_Pin_0);\
- else\
- GPIO_ResetBits(GPIOA, GPIO_Pin_0)
- #define PA1(a) if(a)\
- GPIO_SetBits(GPIOA, GPIO_Pin_1);\
- else\
- GPIO_ResetBits(GPIOA, GPIO_Pin_1)
- #define PC7(a) if(a)\
- GPIO_SetBits(GPIOC, GPIO_Pin_7);\
- else\
- GPIO_ResetBits(GPIOC, GPIO_Pin_7)
- #define PA2() GPIO_ReadInputDataBit(GPIOA, 2)
- #define PC6() GPIO_ReadInputDataBit(GPIOC, 6)
- void GPIO_Config(void);
-
- #endif
复制代码
PA2-PA1.zip
(1.09 MB, 下载次数: 1)
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
这个要改成输入。或者用输入捕获功能进行处理。
评分
查看全部评分
晕了,GPIO配置函数没有被调用...
调用了也不行,主楼已更新。
主循环太短吗?
按我的想法,主程序不停的检测PA2的状态,然后根据检测时PA2的状态,将PA1拉高或拉低。
问题依旧。
硬件应该没问题。还是我理解的不对,程序写的有问题。
主句话错了,应该是:
#define PA2() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)
评分
查看全部评分
IPU就是上拉输入吧?