找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于32单片机的一个小问题

[复制链接]
跳转到指定楼层
楼主
#include "stm32f10x.h"

/*void delay_us(u32 i)                                //此程序延时1us
{
    u32 temp;
    SysTick->LOAD=9*i;         //设置重装数值, 72MHZ时
    SysTick->CTRL=0X01;         //使能,减到零是无动作,采用外部时钟源
    SysTick->VAL=0;                //清零计数器
    do
    {
        temp=SysTick->CTRL;           //读取当前倒计数值
    }
    while((temp&0x01)&&(!(temp&(1<<16))));     //等待时间到达
    SysTick->CTRL=0;    //关闭计数器
    SysTick->VAL=0;        //清空计数器
}*/



void delay_ms(volatile u32 i)                                        //此程序延时1ms,,i不能大于1800,暂不知为什么,定时一分钟可以让delay_ms(1000)for循环60次来实现,需测试
{
    volatile u32 temp;
    SysTick->LOAD=9000*i;      //设置重装数值, 72MHZ时
    SysTick->CTRL=0X01;        //使能,减到零是无动作,采用外部时钟源
    SysTick->VAL=0;            //清零计数器
    do
    {
        temp=SysTick->CTRL;       //读取当前倒计数值
    }
    while((temp&0x01)&&(!(temp&(1<<16))));    //等待时间到达
    SysTick->CTRL=0;    //关闭计数器
    SysTick->VAL=0;        //清空计数器
}

int main(void)
{
                GPIO_InitTypeDef GPIO_InitStruct;    //定义CPIO初始化类型定义
         
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  //使能GPIOA的时钟
       
                GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;           //填入LED连接的引脚
                GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;         //设置该引脚的模式为推挽输出
                GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //设置引脚的输出速度
            
                GPIO_Init(GPIOC,&GPIO_InitStruct);    //使用GPIO初始化函数 初始化 所需要用的引脚
       
                while(1)
                {
                        GPIO_ResetBits(GPIOC,GPIO_Pin_13);  //给PA8低电平使小灯亮起来
                        delay_ms(1000);
               

                        GPIO_SetBits(GPIOC,GPIO_Pin_13);  //给PA8高电平使小灯灭
                        delay_ms(1000);
                       
               
                }
}


这是一个led闪烁的程序,我在stm32f103c6t6上烧录就可以1s亮灭一次,但是在stm32f103c8t6上烧录灯就是一直亮,这是怎么回事,是买到了假货吗,我看c8t6的丝印确实有点模糊,但是c8t6的芯片延时改成delay_ms(100);的话也能看到闪烁,闪烁的特别快,改成1000就长亮。。。很奇怪啊

51hei图片_20221219211525.jpg (2.45 MB, 下载次数: 86)

51hei图片_20221219211525.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:45879 发表于 2022-12-20 09:23 | 只看该作者
debug一锅子,试试
回复

使用道具 举报

板凳
ID:978416 发表于 2022-12-20 12:45 | 只看该作者

你好,一锅子是什么?
回复

使用道具 举报

地板
ID:830831 发表于 2022-12-20 17:40 | 只看该作者
我感觉 32的程序完全没法交流,一堆一堆的代码
回复

使用道具 举报

5#
ID:401564 发表于 2022-12-20 19:36 | 只看该作者
你先去百度一下"SysTick最大延时"systick并不是无限延时给你的
对于长时间的延时,比如1秒,肯定不是用单纯的死等,滴答时钟就是用来作为节拍用的
比如一个变量,每1mS就++,到了1000就是1秒了
难道要程序在那干等1秒,什么都不做吗?
回复

使用道具 举报

6#
ID:401564 发表于 2022-12-20 19:38 | 只看该作者
可以百度一下  uwTick
回复

使用道具 举报

7#
ID:978416 发表于 2022-12-21 09:29 | 只看该作者
Y_G_G 发表于 2022-12-20 19:36
你先去百度一下"SysTick最大延时"systick并不是无限延时给你的
对于长时间的延时,比如1秒,肯定不是用单纯 ...

好的,谢谢,我去看看
回复

使用道具 举报

8#
ID:978416 发表于 2022-12-21 09:30 | 只看该作者
Highnose 发表于 2022-12-20 17:40
我感觉 32的程序完全没法交流,一堆一堆的代码

是呢,51实现个流水灯就那么几行代码,这32一堆
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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