标题: STM32最基本问题,点亮LED。 [打印本页]

作者: hange_v    时间: 2017-8-20 14:59
标题: STM32最基本问题,点亮LED。
为什么我的LED不闪烁,下面是程序和电路。#include "stm32f10x.h"
void delay_ms(u32 ms){
  u32 temp;
        SysTick->LOAD = 9000 * ms;  //重装初值,72MHz时
        SysTick->CTRL = 0x01;  //使能,减到0无动作,采用外部时钟
        SysTick->VAL = 0;  //清零计数器
        do{
          temp = SysTick->CTRL;  //读取当前倒计数数值
        }while((temp & 0x01) && (!(temp & (1 << 16))));  //等待时间到达
        SysTick->CTRL = 0;  //关闭计数器
        SysTick->VAL = 0;  //清空计数器
}

void testGPIO_Config(void){
  GPIO_InitTypeDef GPIO_InitStructure;
       
        GPIO_InitStructure.GPIO_Pin = testGPIO_Pin;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
       
        GPIO_Init(testGPIO, &GPIO_InitStructure);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
}

int main(void){
        SystemInit();
        //SysTick
        testGPIO_Config();
        while(1){
        GPIO_WriteBit(testGPIO, testGPIO_Pin, Bit_RESET);
        delay_ms(1000);
        GPIO_WriteBit(testGPIO, testGPIO_Pin, Bit_SET);
        delay_ms(1000);
        }
  //return 0;
}


(_C~L]SC)(ZD2C43%A$0DL1.png (11.92 KB, 下载次数: 90)

(_C~L]SC)(ZD2C43%A$0DL1.png

作者: 柠檬小生    时间: 2017-8-20 22:03
LED是只会亮但是不闪烁还是?印象中stm32是有自带的库函数用作延时的。你可以通过注释其他语句来验证是GPIO设置问题还是延时函数的问题
作者: 大灰狼爱喝汤    时间: 2017-8-20 23:16
你GPIOB的时钟挂上去了?
作者: sldx    时间: 2017-8-21 04:52
先把灯点亮再说,然后再闪烁
作者: hange_v    时间: 2017-8-21 08:47
大灰狼爱喝汤 发表于 2017-8-20 23:16
你GPIOB的时钟挂上去了?

我用的GPIOE,开启了GPIOE的时钟,难道还要开GPIOB的时钟???
作者: hange_v    时间: 2017-8-21 08:54
柠檬小生 发表于 2017-8-20 22:03
LED是只会亮但是不闪烁还是?印象中stm32是有自带的库函数用作延时的。你可以通过注释其他语句来验证是GPIO ...

只亮,不闪烁,是不是和时钟有关SystemIni(),
作者: hfh163    时间: 2017-8-21 09:19
hange_v 发表于 2017-8-21 08:47
我用的GPIOE,开启了GPIOE的时钟,难道还要开GPIOB的时钟???

不用的
作者: gm388    时间: 2017-8-24 15:09
GPIO_WriteBit(testGPIO, testGPIO?_Pin_?, Bit_RESET);
        不用指定GPIO的哪一组的的第几个引脚???

作者: 想飞的猪1    时间: 2017-9-8 14:31
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)     void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)给IO口写0写1是这两个函数,而不是void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)这个,具体请参考STM32固件库使用手册
作者: hfh163    时间: 2018-9-13 18:37
觉得时钟不对
作者: zyx1993    时间: 2018-9-15 11:17
高低电平切换,再加上延时就可以的
作者: 探路    时间: 2018-9-16 11:10
那就可能是你的延时函数没起作用或者是延时函数有问题,你的延时函数初在主函数中始化了吗?
作者: carlos64    时间: 2018-9-18 14:45
可以看看正点原子的代码,里面很详细 。
作者: 狮子歌歌    时间: 2018-9-20 09:18
时钟使能要放在前面,然后配置IO
作者: Aretiades    时间: 2018-9-20 12:00
如果是只亮不闪烁的话,看看程序是不是卡在那个延时函数那里了,话说你这个系统时钟8分频了?不然为啥SysTick->LOAD = 9000 * ms;  这里是9000

作者: sunding    时间: 2018-9-20 15:24
高低电平切换,并加上延时函数
作者: xiebo    时间: 2018-9-20 16:42
参考一下正点原子的代码吧
作者: cjl_hit    时间: 2018-9-20 17:28
一般,电平高低切换之间需要加时延,才能看到闪烁的效果




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1