网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月09日漏签0天
stm32吧 关注:47,312贴子:143,929
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 28回复贴,共1页
<<返回stm32吧
>0< 加载中...

为什么我按照stm32自学笔记这本书上面的程序却不能实现功能呢

  • 只看楼主
  • 收藏

  • 回复
  • 悠薄
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/********** (C) COPYRIGHT 2008 STMicroelectronics **********
* File Name : main.c
* Description : 主函数
***********************************************************/
/* Includes ----------------------------------------------*/
#include "stm32f10x_lib.h"
/* Private typedef 自定义同义关键字 ----------------------*/
typedef enum
{
KeyScanState_0=0x00,
KeyScanState_1=0x01,
KeyScanState_2=0x02,
}KeyScanState_Typedef;
/* Private define 自定义参数宏 ---------------------------*/
#define KEYPORT GPIOA
#define KEY0PIN GPIO_Pin_0
#define KEY1PIN GPIO_Pin_8
#define LEDPORT GPIOD
#define LED0PIN GPIO_Pin_8
#define LED1PIN GPIO_Pin_9
/* Private macro 自定义函数宏 ----------------------------*/
/* Private variables 自定义变量 --------------------------*/
/* Private function prototypes 自定义函数声明 ------------*/
/* Private functions -------------------------------------*/
void RccInitialisation(void);
void GpioInitialisation(void);
void SystickInitialisation(void);
/***********************************************************
* Function Name : main
* Description : main函数
* Input : None
* Output : None
* Return : None
***********************************************************/
int main(void)
{
vu16 KeyPortStatus=0;
KeyScanState_Typedef KeyScanState; /*定义按键扫描状态枚举变量*/
RccInitialisation(); /*设置系统时钟*/
GpioInitialisation(); /*设置GPIO端口*/
SystickInitialisation();/*设置Systick定时器*/
while(1)
{
if(SysTick_GetFlagStatus(SysTick_FLAG_COUNT)==SET) /*查询20ms到?*/
{
KeyPortStatus=GPIO_ReadInputData(KEYPORT)&0x000f; /*读取I/O电平*/
switch(KeyScanState) /*进入状态机流程*/
{
/*状态一:判断有否按键按下*/
case KeyScanState_0:
{
if(KeyPortStatus!=0x000f)
{
KeyScanState=KeyScanState_1; /*有按键按下,更新状态标志*/
}
break;
}
/*状态2:判断是否抖动*/
case KeyScanState_1:
{
if(KeyPortStatus)
{
/*非抖动,确认按键按下,执行相应操作*/
if(GPIO_ReadInputDataBit(KEYPORT,KEY0PIN)==0)
{GPIO_WriteBit(LEDPORT,LED0PIN,
(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED0PIN)));}
else if(GPIO_ReadInputDataBit(KEYPORT,KEY1PIN)==0)
{GPIO_WriteBit(LEDPORT,LED1PIN,
(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1PIN)));}
KeyScanState=KeyScanState_2; /*更新状态标志*/
}
else
{
KeyScanState=KeyScanState_0; /*抖动,确认按键未按下,更新状态标志*/
}
break;
}
/*状态3:松手检测*/
case KeyScanState_2:
{
if(KeyPortStatus==0x000f)
{
KeyScanState=KeyScanState_0; /*松手,更新状态标志*/
}
break;
}}}}}
/***********************************************************
* Function Name : RccInitialisation
* Description : 设置系统各部分时钟
* Input : None
* Output : None
* Return : None
***********************************************************/
void RccInitialisation(void)
{
{/*本部分代码为RccInitialisation函数内部部分代码,见附录A程序清单A.1*/}
}
/***********************************************************
* Function Name : GpioInitialisation
* Description : 设置各GPIO端口功能
* Input : None
* Output : None
* Return : None
***********************************************************/
void GpioInitialisation(void)
{
/*定义GPIO初始化结构体GPIO_InitStructure*/
GPIO_InitTypeDef GPIO_InitStructure;
/*打开APB2总线上的GPIOD时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA,ENABLE);
/*设置S3、S4为浮空输入(外部已加入上拉电阻,所以不用设置为上拉输入)*/
GPIO_InitStructure.GPIO_Pin = KEY0PIN | KEY1PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(KEYPORT, &GPIO_InitStructure);
/*设置GPIOD.8~9为推挽输出,最大翻转频率为50MHz*/
GPIO_InitStructure.GPIO_Pin=LED0PIN | LED1PIN;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(LEDPORT,&GPIO_InitStructure);
}
/***********************************************************
* Function Name : Systick_Configuration
* Description : 设置Systick定时器,重装载时间为20ms
* Input : None
* Output : None
* Return : None
***********************************************************/
void SystickInitialisation(void)
{
SysTick_CounterCmd(SysTick_Counter_Disable);/*失能Systick定时器*/
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);/*选择HCLK为Systick时钟源*/
SysTick_CounterCmd(SysTick_Counter_Clear);/*清除Systick计数器*/
/*主频为72MHz,配置计数值为72000*20可以得到20ms定时间隔*/
SysTick_SetReload(72000*20);//设置Systick定时器的重装载值
SysTick_CounterCmd(SysTick_Counter_Enable);/*启动Systick定时器*/
}
--------------------------------------------------
我用的是火牛板,所以管脚改了一下,用了两个按键和两个led灯,都没反应啊,哪位大神来帮我看一下


  • 悠薄
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/********** (C) COPYRIGHT 2008 STMicroelectronics **********
* File Name : main.c
* Description : 主函数
***********************************************************/
/* Includes ----------------------------------------------*/
#include "stm32f10x_lib.h"
/* Private typedef 自定义同义关键字 ----------------------*/
/* Private define 自定义参数宏 ---------------------------*/
/* Private macro 自定义函数宏 ----------------------------*/
/* Private variables 自定义变量 --------------------------*/
/* Private function prototypes 自定义函数声明 ------------*/
/* Private functions -------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);
/***********************************************************
* Function Name : main
* Description : main函数
* Input : None
* Output : None
* Return : None
***********************************************************/
int main(void)
{
vu16 i=0;
RCC_Configuration(); /*设置系统时钟*/
GPIO_Configuration(); /*设置GPIO端口*/
USART_Configuration(); /*设置USART*/
while(1)
{
/*等待USART1接收数据完毕*/
if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
/*向串口发送接收到的数据*/
USART_SendData(USART1,USART_ReceiveData(USART1));
/*短延时,保证收发稳定性*/
for(i=0;i<500;i++);
}}}
/***********************************************************
* Function Name : RCC_Configuration
* Description : 设置系统各部分时钟
* Input : None
* Output : None
* Return : None
***********************************************************/
void RCC_Configuration(void)
{
{/*本部分代码为RccInitialisation函数内部部分代码,见附录A程序清单A.1*/}
/*开启USART1和GPIOA时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
}
/***********************************************************
* Function Name : GPIO_Configuration
* Description : 设置各GPIO端口功能
* Input : None
* Output : None
* Return : None
***********************************************************/
void GPIO_Configuration(void)
{
/*定义GPIO初始化结构体GPIO_InitStructure*/
GPIO_InitTypeDef GPIO_InitStructure;
/*设置USART1的Tx脚(PA.9)为第2功能推挽输出模式*/
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);
}
/***********************************************************
* Function Name : USART_Configuration
* Description : 设置USART
* Input : None
* Output : None
* Return : None
***********************************************************/
void USART_Configuration(void)
{
/*定义USART初始化结构体USART_InitStructure*/
USART_InitTypeDef USART_InitStructure;
/*定义USART初始化结构体USART_ClockInitStructure*/
USART_ClockInitTypeDef USART_ClockInitStructure;
/*波特率为9600bps;8位数据长度;1个停止位,无校验;禁用硬件流控制;禁止USART时钟;
*时钟极性低;在第2个边沿捕获数据;最后一位数据的时钟脉冲不从SCLK输出*/
USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_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;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE); /*使能USART1*/
}
------------------------------------------------------------
这个用串口通讯工具向里面输送字符应该会显示在接收窗口的,不过都是乱码,好奇怪,而且一直不停刷新
USART_ClearITPendingBit(USART1, USART_IT_RXNE);这句老师让加的,说是不刷了,不过没用


武汉途思云辉网络科技
论文 aiAI智能论文神器,输入题目10分钟出稿,安全系数高。从论文格式模板到思路大纲,从参考文献到致谢模板,契合毕业论文要求,立即体验;
2025-05-09 02:59广告
立即查看
广告
立即查看
  • 悠薄
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
没有大神吗QAQ


  • 2012路过人间
  • 颇具盛名
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
系统滴答定时器的中断写了没有


  • jinpenghf
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主,你有配套的资料。程序啥的


  • jinpenghf
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果有的话能否发我一份


  • 凶猛的黑灵猫
  • 闻名一方
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
GPIO初始化没有做。。。。


  • 凶猛的黑灵猫
  • 闻名一方
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有条件去下载ST的CUBEMX,用它做程序框架吧。。。。很适合新手,老手用起来也照样好。


360文库
stm32模板下载,海量文档精选范文,适用性强,下载即可直接使用.stm32360提供海量行业文档,正规严谨
2025-05-09 02:59广告
立即查看
广告
立即查看
  • 凶猛的黑灵猫
  • 闻名一方
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你的KeyScanState状态机没有初始化,导致switch(KeyScanState)不会进入任何一个case。。。。。。。。。


  • 凶猛的黑灵猫
  • 闻名一方
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
KeyScanState_Typedef KeyScanState = KeyScanState_0; /*定义按键扫描状态枚举变量*/
状态机一定要有初值。
如果实在没有办法给初值那么你需要一个default在switch块里面,在那里你给它一个合理的值。


  • wj70sq
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
原书少了这句。好像程序进入死循环,困扰了我我两天,看了本帖才解决。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 28回复贴,共1页
<<返回stm32吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示