OpenEdv-开源电子网

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

STM32一个系列的不同型号有区别吗?希望各位大神帮忙指点

[复制链接]

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
发表于 2014-5-16 17:20:43 | 显示全部楼层 |阅读模式
5金钱
最近写了一个程序,利用STM32F103ZET6的PB10管脚,采用上升沿触发中断来统计1分钟内输入方波个数,调试结果很理想。同样的程序,烧写进STM32F103RBT6,也是PB10管脚,但是结果差异很大。输出结果很不稳定,且数据偏差较大。附上程序,希望各位大神帮忙看看。谢谢了
/*
*********************************************************************************************************
*                                  
* 模块名称 : 主程序模块。
* 文件名称 : main.c
* 说    明 : 
*
*********************************************************************************************************
*/
#include "stm32f10x.h"
#include <stdio.h>


void RCC_HSE_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void EXTI_Configuration(void);
void USART1_Configuration(void);
void TIM2_Configuration(void);
void Uart1_PutChar(u32 ch);
u32 Square_count=0; //方波个数计数
u32 Square_counter=0; //1分钟方波个数
u8  Minute_counter=0; //时间计数
u8  Minute_flag=0;       //1分钟到标志
u8  Tx_flag=0;      //串口发送数据标志
int i = 0;
int main(void)
{
RCC_ClocksTypeDef RCC_Clock;
  RCC_ClocksTypeDef *RCC_Clocks=&RCC_Clock;
char high,low;
//char mid_high,mid_low;
RCC_HSE_Configuration(); /*设置系统时钟为外部时钟*/
GPIO_Configuration();/*设置GPIO端口*/
TIM2_Configuration();/*设置TIM*/
  EXTI_Configuration(); /*设置EXTI*/
USART1_Configuration();/*设置USART*/
NVIC_Configuration();/*设置NVIC*/
RCC_GetClocksFreq(RCC_Clocks);
while(1)

high=(char)(Square_counter >> 8);
Uart1_PutChar(high);
i=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10); 
if(Tx_flag==1)
{
high=(char)(Square_counter >> 8); //获取计数值的高8位
//mid_high=(char)((Square_counter >> 16)&0xff);//获取计数值的中间高8位
//mid_low=(char)((Square_counter >> 8)&0xff);//获取计数值的中间低8位
low=(char)(Square_counter&0xff);  //获取计数值的低8位

Uart1_PutChar(high);  //发送高8位
//Uart1_PutChar(mid_high);   //发送中间高8位
//Uart1_PutChar(mid_low);   //发送中间低8位
Uart1_PutChar(low);   //发送低8位
Tx_flag=0;    //清除串口发送标志
}
else
{
;
}
  }
}
/*
*********************************************************************************************************
* 函 数 名: RCC_HSE_Configuration()
* 功能说明: 主程序调用初始化系统时钟
* 返 回 值: 无
*********************************************************************************************************
*/
void RCC_HSE_Configuration(void)          //设置系统时钟,也可直接调用SystemInit();系统时钟自动初始化为72M

RCC_DeInit();//将外设RCC寄存器重设为缺省值 
RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE),HSE晶振打开(On) 
if(RCC_WaitForHSEStartUp()==SUCCESS)//等待HSE起振,SUCCESS:HSE晶振稳定且就绪

RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)RCC_SYSCLK_Div1--AHB时钟=系统时钟 
RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2)RCC_HCLK_Div1--APB2时钟=HCLK 
RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)RCC_HCLK_Div2--APB1时钟=HCLK/2 

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//设置PLL时钟源及倍频系数 
RCC_PLLCmd(ENABLE);//PLL使能 
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCC标志位(PLL准备好标志)设置与否 
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟SYSCLK 
while(RCC_GetSYSCLKSource()!=0x08);//0x08LL作为系统时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA,ENABLE);  //使能GPIOA时钟以及辅助串口功能时钟 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);                        //使能TIM2时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);                     //使能USART1时钟    
}
}
/*
*********************************************************************************************************
* 函 数 名: Uart1_PutChar(u32 ch)
* 功能说明: 串口1发送数据函数
* 返 回 值: 无
*********************************************************************************************************
*/
void Uart1_PutChar(u32 ch)
{
/* 写一个字节到USART1 */
USART_SendData(USART1, ch);
/* 等待发送结束 */
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == SET);
}
/*
*********************************************************************************************************
* 函数名称 : GPIO_Configuration
* 说    明 : 设置GPIO各个端口功能
* 输入参数 : 无
*********************************************************************************************************
*/
void GPIO_Configuration()
{
/*定义GPIO初始化结构体GPIO_InitStructure*/
GPIO_InitTypeDef  GPIO_InitStructure;  
/*设置外部中断引脚PB.10浮空输入*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource10);//定义PB.10口为外部中断输入通道
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*设置USART1的Tx脚(PA.9)为推挽输出功能*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/*设置USART1的Rx脚(PA.10)为浮空输入功能*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
/*
*********************************************************************************************************
* 函数名称 : TIM2_Configuration()
* 说    明 : 主程序调用初始化定时器2
* 输入参数 : 无
*********************************************************************************************************
*/

void TIM2_Configuration(void)   //定时器2初始化   定时1S
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;     //定义TIM的结构体定义
TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清空标志位
TIM_TimeBaseStructure.TIM_Period = 19999;   //初值 通过预分频计算值和中断计数初值确定定时时间
TIM_TimeBaseStructure.TIM_Prescaler = 3599;       //定时设置预分频  
TIM_TimeBaseStructure.TIM_ClockDivision = 0;     //时钟
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);    
TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE); //使能中断
TIM_Cmd(TIM2, ENABLE);                           //TIM2使能计数 
}
/*
*********************************************************************************************************
*                                  
* 函数名称 : NVIC_Configuration
* 说    明 : 设置NVIC各个端口功能
* 输入参数 : 无
*********************************************************************************************************
*/
void NVIC_Configuration()
{
NVIC_InitTypeDef NVIC_InitStructure; //定义初始化结构体NVIC_InitStructure
#ifdef VECT_TAB_RAM
  NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//外部中断优先级设置
NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn; //中断口设置
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //响应优先级为1
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
//TIM2中断
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;    //中断口设置
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //响应优先级为1
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*
*********************************************************************************************************
*                                  
* 函数名称 : EXTI_Configuration
* 说    明 : 设置NVIC各个端口功能
* 输入参数 : 无
*********************************************************************************************************
*/
void EXTI_Configuration()
{
EXTI_InitTypeDef EXTI_InitStructure; //定义EXIT初始化结构体EXTI_InitStructure

EXTI_ClearFlag(EXTI_Line10);    //清除中断标志
EXTI_InitStructure.EXTI_Line=EXTI_Line10;  //选择待使能外部中断线路1
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //设置EXTI线路为中断请求
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//设置输入线路上升沿为中断请求
EXTI_InitStructure.EXTI_LineCmd = ENABLE; 
EXTI_Init(&EXTI_InitStructure);
}
/*
*********************************************************************************************************
*                                  
* 函数名称 : USART1_Configuration()
* 说    明 : 主程序调用初始化串口通讯
* 输入参数 : 无
*********************************************************************************************************
*/
void USART1_Configuration(void)                         //串口初始化函数
{
USART_InitTypeDef USART_InitStructure;               //定义结构体  
USART_InitStructure.USART_BaudRate = 9600;           //波特率9600 
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //1位停止字节
USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验 
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无流控制    
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //打开Rx接收和Tx发送功能
USART_Init(USART1, &USART_InitStructure);           //初始化
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);         //启动串口接收中断
USART_Cmd(USART1, ENABLE);                           //启动串口
USART_ClearFlag(USART1,USART_FLAG_TC);               //清空发送完成标志位 解决第一个字节有时候发不出去的问题
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-16 20:02:08 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-16 20:09:28 | 显示全部楼层
变的很不规律,差的挺多的。不知道两款芯片是不是有什么区别我没有修正?
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-16 20:09:56 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
变的很不规律,差的挺多的。不知道两款芯片是不是有什么区别我没有修正?
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-16 20:25:31 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
在网上搜资料时知道了这个论坛,今天第一次进咱们这个论坛并注册,我看了下你的回复量和论坛的其他帖子,才知道你这么辛勤的给大家服务。不好意思啊,下午和晚上那会儿是着急,想请你帮忙所以就直接给你发消息。请见谅。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-16 21:03:26 | 显示全部楼层
回复【3楼】liuyk:
---------------------------------
没有区别.
我在ZET6和RBT6都做过输入捕获,很稳定的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-16 21:09:32 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我的ZET6是开发板,RBT6是焊接的板子。照你这么说是不是硬件可能有问题?
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-16 21:18:50 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
对了,您是用我的这个程序测的吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-16 23:32:19 | 显示全部楼层
回复【8楼】liuyk:
---------------------------------
不是,我自己有代码。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-17 15:03:59 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
哦   那是不是硬件出问题的概率要大些了?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-17 20:56:52 | 显示全部楼层
回复【10楼】liuyk:
---------------------------------
应该还是从软件方面着手...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-17 22:20:24 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
哦,我的是相同的程序,在ZET6很稳定的,结果也非常准确。你不是说同种型号没有区别吗?难道不可以通用?我不太明白你的意思
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-18 00:03:13 | 显示全部楼层
回复【12楼】liuyk:
---------------------------------
还是怀疑是软件问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-18 10:01:31 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
那软件大概是哪儿的问题呢?请指点
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-18 16:03:39 | 显示全部楼层
回复【14楼】liuyk:
---------------------------------
检查中断处理.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-18 22:40:29 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
我设置的是上升沿触发外部中断,他们有区别吗??
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-18 23:43:30 | 显示全部楼层
回复【16楼】liuyk:
---------------------------------
这个没所谓啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-19 08:26:18 | 显示全部楼层
回复【17楼】正点原子:
---------------------------------
不是说检查中断处理吗?我不太明白您的意思啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-5-19 23:21:49 | 显示全部楼层
回复【18楼】liuyk:
---------------------------------
看程序运行的过程(和你的思路一致么?)对不对...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-5-16
在线时间
0 小时
 楼主| 发表于 2014-5-20 21:14:59 | 显示全部楼层
回复【19楼】正点原子:
---------------------------------
已经成功调试  谢谢
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-9-8
在线时间
8 小时
发表于 2016-11-2 17:10:33 | 显示全部楼层
是什么原因导致同一个程序在不同系列里工作不一样的?
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-9-8
在线时间
8 小时
发表于 2016-11-2 17:12:16 | 显示全部楼层
我也遇到类似的,我写一个嘀嗒定时器在C8T6上运行不正常,在RBT6上就可以正常工作,外部时钟都一样的;同一个工程没有变烧到两个板子上工作状态就不一样;
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 18:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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