OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7127|回复: 5

stm32f100cbt6工作不起来

[复制链接]

30

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2012-11-12
在线时间
0 小时
发表于 2013-3-1 08:59:03 | 显示全部楼层 |阅读模式
我的stm32f100cbt6可以用串口下载进程序,但是程序运行不了,是什么原因啊,只用了一个8M的晶振


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-1 09:48:11 | 显示全部楼层
晶振这里没问题啊.
检查其他地方是否有问题吧.
代码什么的,看看.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

30

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2012-11-12
在线时间
0 小时
 楼主| 发表于 2013-3-1 15:14:23 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这是程序,我改了时钟的配置,在f103上能正常运行,但在f100上就不行,您帮我看一下

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"

//ALIENTEK Mini STM32开发板范例代码3
//串口实验
//技术论坛:www.openedv.com
void RCC_Configuration(void);
ErrorStatus HSEStartUpStatus;

 int main(void)
 {
u8 i=0; 
//  SystemInit();//系统时钟等初始化
RCC_Configuration();
// delay_init(20);      //延时初始化
NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);//串口初始化为9600
  LED_Init();  //LED端口初始化
while(1)
{
   //if(flag==1)
   
     ut_String((u8*)(USART_TX_BUF+i));
 //Uart_PutString((u8*)(USART_TX_BUF+i),12);
 //i++;
 //Uart_PutChar(USART_TX_BUF[i++]);
 if(i>12)
 i=0;
 //delay_ms(250);
 
GPIO_ResetBits(GPIOA, GPIO_Pin_14);
// GPIO_ResetBits(GPIOF, GPIO_Pin_7);
//  delay_ms(250);

}  

 }

void RCC_Configuration(void)
{

    /* RCC system reset(for debug purpose) */
    RCC_DeInit();                      //将外设RCC寄存器重设为缺省值,内部不需要去修改

    /* Enable HSE */
    RCC_HSEConfig(RCC_HSE_ON);     //HSE振荡器开启
    
    /* Wait till HSE is ready */
    HSEStartUpStatus = RCC_WaitForHSEStartUp();   //等待HSE运行稳定
    
    if(HSEStartUpStatus == SUCCESS)              //如果HSE运行稳定了
    {
        /* Enable refetch Buffer RFTBE*/
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  //使能预取指缓存
        
        /* Flash 2 wait state */
 //       FLASH_SetLatency(FLASH_Latency_2);//设置代码延时值,2 延时周期
        FLASH_SetLatency(FLASH_Latency_0);//设置代码延时值,0 延时周期xlg_change
        
//上面的这两句不明白什么意思,不过现在不管他,以后再理它

        /* HCLK = SYSCLK */
        RCC_HCLKConfig(RCC_SYSCLK_Div1);   //AHB总线时序不分频
        
        /* CLK2 = HCLK */
        RCC_PCLK2Config(RCC_HCLK_Div1);     //APB2时钟不分频 (高速)
        
        /* CLK1 = HCLK/2 */
        RCC_PCLK1Config(RCC_HCLK_Div2);     //APB1时钟2分频 (低速)
        
        /* LLCLK = 8MHz * 9 = 72 MHz */
        /* LLCKLK = 8MHz/2 * 5 = 20MHz // LeoZhang @ Willas-Array 
        The STM32F100 max speed is 20MHz,其实是可以到达24M */
        RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_5);
    //高速外部时钟2分频为4MHz,再进行5倍频20MHz
        
        /* Enable LL */ 
        RCC_PLLCmd(ENABLE);   //开启PLL
        
        /* Wait till LL is ready 等待PLL运行稳定 */ 
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
        {
        }
        /* Select LL as system clock source */
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);   //选择PLL 作为系统时钟
        
        /* Wait till PLL is used as system clock source */
        while(RCC_GetSYSCLKSource() != 0x08)        //返回用作系统时钟的时钟源
        {
        }
   }
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-1 20:30:43 | 显示全部楼层
看看程序是死在哪里了?
另外,你要确定板子没问题哦.否则因为硬件问题,老在查软件,那就悲剧了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

30

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2012-11-12
在线时间
0 小时
 楼主| 发表于 2013-3-4 09:19:19 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,硬件方面我用示波器看晶振频率在8MHZ左右,复位也没问题,还应该查什么东西呢?另外程序方面我就改了一下RCC的配置,因为我用的f100,这个程序在f103上能正常运行,麻烦你看一下我的程序,还应该改什么呢


#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"

//ALIENTEK Mini STM32开发板范例代码3
//串口实验
//技术论坛:www.openedv.com
void RCC_Configuration(void);
ErrorStatus HSEStartUpStatus;

 int main(void)
 {
u8 i=0; 
//  SystemInit();//系统时钟等初始化
RCC_Configuration();
// delay_init(20);      //延时初始化
NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);//串口初始化为9600
  LED_Init();  //LED端口初始化
while(1)
{
   //if(flag==1)
   
     ut_String((u8*)(USART_TX_BUF+i));
 //Uart_PutString((u8*)(USART_TX_BUF+i),12);
 //i++;
 //Uart_PutChar(USART_TX_BUF[i++]);
 if(i>12)
 i=0;
 //delay_ms(250);
 
GPIO_ResetBits(GPIOA, GPIO_Pin_14);
// GPIO_ResetBits(GPIOF, GPIO_Pin_7);
//  delay_ms(250);

}  

 }

void RCC_Configuration(void)
{

    /* RCC system reset(for debug purpose) */
    RCC_DeInit();                      //将外设RCC寄存器重设为缺省值,内部不需要去修改

    /* Enable HSE */
    RCC_HSEConfig(RCC_HSE_ON);     //HSE振荡器开启
    
    /* Wait till HSE is ready */
    HSEStartUpStatus = RCC_WaitForHSEStartUp();   //等待HSE运行稳定
    
    if(HSEStartUpStatus == SUCCESS)              //如果HSE运行稳定了
    {
        /* Enable refetch Buffer RFTBE*/
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  //使能预取指缓存
        
        /* Flash 2 wait state */
 //       FLASH_SetLatency(FLASH_Latency_2);//设置代码延时值,2 延时周期
        FLASH_SetLatency(FLASH_Latency_0);//设置代码延时值,0 延时周期xlg_change
        
//上面的这两句不明白什么意思,不过现在不管他,以后再理它

        /* HCLK = SYSCLK */
        RCC_HCLKConfig(RCC_SYSCLK_Div1);   //AHB总线时序不分频
        
        /* CLK2 = HCLK */
        RCC_PCLK2Config(RCC_HCLK_Div1);     //APB2时钟不分频 (高速)
        
        /* CLK1 = HCLK/2 */
        RCC_PCLK1Config(RCC_HCLK_Div2);     //APB1时钟2分频 (低速)
        
        /* LLCLK = 8MHz * 9 = 72 MHz */
        /* LLCKLK = 8MHz/2 * 5 = 20MHz // LeoZhang @ Willas-Array 
        The STM32F100 max speed is 20MHz,其实是可以到达24M */
        RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_5);
    //高速外部时钟2分频为4MHz,再进行5倍频20MHz
        
        /* Enable LL */ 
        RCC_PLLCmd(ENABLE);   //开启PLL
        
        /* Wait till LL is ready 等待PLL运行稳定 */ 
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
        {
        }
        /* Select LL as system clock source */
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);   //选择PLL 作为系统时钟
        
        /* Wait till PLL is used as system clock source */
        while(RCC_GetSYSCLKSource() != 0x08)        //返回用作系统时钟的时钟源
        {
        }
   }
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-4 09:48:12 | 显示全部楼层
F100,你这个
//       FLASH_SetLatency(FLASH_Latency_2);//设置代码延时值,2 延时周期 
        FLASH_SetLatency(FLASH_Latency_0);//设置代码延时值,0 延时周期xlg_change 
把下面这句注释掉,上面那句取消注释试试.
是不是F100也需要等待时间?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-22 19:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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