找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2987|回复: 17
打印 上一主题 下一主题
收起左侧

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, 下载次数: 67)

(_C~L]SC)(ZD2C43%A$0DL1.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:201102 发表于 2017-8-20 22:03 | 只看该作者
LED是只会亮但是不闪烁还是?印象中stm32是有自带的库函数用作延时的。你可以通过注释其他语句来验证是GPIO设置问题还是延时函数的问题

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:220961 发表于 2017-8-20 23:16 | 只看该作者
你GPIOB的时钟挂上去了?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:219796 发表于 2017-8-21 04:52 来自手机 | 只看该作者
先把灯点亮再说,然后再闪烁
回复

使用道具 举报

5#
ID:190832 发表于 2017-8-21 08:47 | 只看该作者
大灰狼爱喝汤 发表于 2017-8-20 23:16
你GPIOB的时钟挂上去了?

我用的GPIOE,开启了GPIOE的时钟,难道还要开GPIOB的时钟???
回复

使用道具 举报

6#
ID:190832 发表于 2017-8-21 08:54 | 只看该作者
柠檬小生 发表于 2017-8-20 22:03
LED是只会亮但是不闪烁还是?印象中stm32是有自带的库函数用作延时的。你可以通过注释其他语句来验证是GPIO ...

只亮,不闪烁,是不是和时钟有关SystemIni(),
回复

使用道具 举报

7#
ID:219447 发表于 2017-8-21 09:19 | 只看该作者
hange_v 发表于 2017-8-21 08:47
我用的GPIOE,开启了GPIOE的时钟,难道还要开GPIOB的时钟???

不用的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:58925 发表于 2017-8-24 15:09 | 只看该作者
GPIO_WriteBit(testGPIO, testGPIO?_Pin_?, Bit_RESET);
        不用指定GPIO的哪一组的的第几个引脚???

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:230901 发表于 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固件库使用手册

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:219447 发表于 2018-9-13 18:37 | 只看该作者
觉得时钟不对
回复

使用道具 举报

11#
ID:397544 发表于 2018-9-15 11:17 | 只看该作者
高低电平切换,再加上延时就可以的
回复

使用道具 举报

12#
ID:229016 发表于 2018-9-16 11:10 | 只看该作者
那就可能是你的延时函数没起作用或者是延时函数有问题,你的延时函数初在主函数中始化了吗?
回复

使用道具 举报

13#
ID:399516 发表于 2018-9-18 14:45 | 只看该作者
可以看看正点原子的代码,里面很详细 。
回复

使用道具 举报

14#
ID:400380 发表于 2018-9-20 09:18 | 只看该作者
时钟使能要放在前面,然后配置IO
回复

使用道具 举报

15#
ID:368746 发表于 2018-9-20 12:00 | 只看该作者
如果是只亮不闪烁的话,看看程序是不是卡在那个延时函数那里了,话说你这个系统时钟8分频了?不然为啥SysTick->LOAD = 9000 * ms;  这里是9000
回复

使用道具 举报

16#
ID:400555 发表于 2018-9-20 15:24 | 只看该作者
高低电平切换,并加上延时函数
回复

使用道具 举报

17#
ID:394885 发表于 2018-9-20 16:42 | 只看该作者
参考一下正点原子的代码吧
回复

使用道具 举报

18#
ID:400642 发表于 2018-9-20 17:28 | 只看该作者
一般,电平高低切换之间需要加时延,才能看到闪烁的效果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表