完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用的是STM32F107vc芯片。LED灯共接3.3V的电源。程序如下:
#include"stm32f10x.h" #include "stdio.h" #define BitBand(addr,n) *(volatile unsigned long *)((addr & 0xf0000000)+0x2000000+(addr & 0xfffff)*32+n*2) #define GPIOA_ODR_A (GPIOA_BASE+0x0c) #define GPIOA_IDR_A (GPIOA_BASE+0x08) #define GPIOB_ODR_A (GPIOB_BASE+0x0c) #define GPIOB_IDR_A (GPIOB_BASE+0x08) #define GPIOC_ODR_A (GPIOC_BASE+0x0c) #define GPIOC_IDR_A (GPIOC_BASE+0x08) #define GPIOD_ODR_A (GPIOD_BASE+0x0c) #define GPIOD_IDR_A (GPIOD_BASE+0x08) #define GPIOE_ODR_A (GPIOE_BASE+0x0c) #define GPIOE_IDR_A (GPIOE_BASE+0x08) #define PAout(n) BitBand(GPIOA_ODR_A,n) #define PAin(n) BitBand(GPIOA_IDR_A,n) #define PBout(n) BitBand(GPIOB_ODR_A,n) #define PBin(n) BitBand(GPIOB_IDR_A,n) #define PCout(n) BitBand(GPIOC_ODR_A,n) #define PCin(n) BitBand(GPIOC_IDR_A,n) #define PDout(n) BitBand(GPIOD_ODR_A,n) #define PDin(n) BitBand(GPIOD_IDR_A,n) #define PEout(n) BitBand(GPIOE_ODR_A,n) #define PEin(n) BitBand(GPIOE_IDR_A,n) #define LED1 PDout(2) #define LED2 PDout(3) void RCC_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); } void USART_Configuration(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate =9600; USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx |USART_Mode_Rx; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_WordLength =USART_WordLength_8b; USART_Init(USART1,&USART_InitStructure); USART_Cmd(USART1,ENABLE); } void delay(__IO uint32_t nCount) { for (; nCount != 0; nCount--); } void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3; /////选中之后相应的LED灯就会亮了,不用写0就亮了 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); } int main(void) { RCC_Configuration(); GPIO_Configuration(); USART_Configuration(); LED_Init(); while(1) { LED1=0; /////////////因为是共电源,所以写0灯亮。 LED2=1; //但是写1,灯并不会灭 //但是,如果换成GPIO_SetBits(GPIOD,GPIO_Pin_2); 和 GPIO_ResetBits(GPIOD,GPIO_Pin_3);就能实现亮灭 delay(5000000); LED1=1; LED1=0; delay(5000000); } } 出现以上情况是为什么啊?不应该写0led灯亮,写1led等灭吗?向管脚不管是写1还是写0都实现不了led灭。。。。 |
|
相关推荐
8个回答
|
|
原因找到了 卧槽 是位绑定公式写错了,
#define BitBand(addr,n) *(volatile unsigned long *)((addr & 0xf0000000)+0x2000000+(addr & 0xfffff)*32+n*2) 出现了的错误:n*2应改为n*4。。。。。之前写的是n<<2, 然后改成*的时候没有把2改成4,太粗心了 |
|
|
|
原因找到了 卧槽 是位绑定公式写错了,
#define BitBand(addr,n) *(volatile unsigned long *)((addr & 0xf0000000)+0x2000000+(addr & 0xfffff)*32+n*2) 出现了的错误:n*2应改为n*4。。。。。之前写的是n<<2, 然后改成*的时候没有把2改成4,太粗心了 |
|
|
|
曾学过这样一句话:粗心是数学家最大的天敌,这事我也干过,,,,,
|
|
|
|
Mr_RMS 发表于 2017-4-18 19:44 嗯,一般多为程序问题。找到原因就好! |
|
|
|
在错误中进步
|
|
|
|
|
|
引脚要设置成输出的。
|
|
|
|
看你灯的接法不同,写1才能关的。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1246 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1179 浏览 3 评论
2259 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1345 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1767 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 04:12 , Processed in 0.748032 second(s), Total 88, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号