搜索
bottom↓
回复: 36

回家时间不定,心情不爽,发个STM32的学习帖(io使用,定时器,io中断)

[复制链接]

出0入0汤圆

发表于 2009-9-12 00:58:40 | 显示全部楼层 |阅读模式
前两天看了马老师的STM32学习笔记后,重新拿起了我的万利STM32开发板。

工作平台是MDK3.70,使用的是config wizard模式。

首先说下我的实际目标, 通过在main里面,直接点亮一个LED,简单的io输出控制
                       使用一个定时器,开控制一个LED的亮灭。学会通过wizard模式配置定时器
                       通过两个按键,来控制一个LED的关闭。学会通过wizard模式使用中断。

首先IO的输出配置是很简单,我直接从马老师的程序里面拷贝过来的。是直接给对应的IO地址赋值, GPIOC->ODR  |=BIT6;
每个IO口有下面几个寄存器
   GPIO->CRL   端口配置寄存器低位 7-0
   GPIO->CRH   端口配置寄存器高位 15-8  (如果在程序中不发生变化,这部分只要在wizard里面配置就可以,如果IO的输入输出发生变化,只要在
                                          这部分修改就可以了)
   GPIO->IDR   输入寄存器,设置为输入后,可以直接读出来。
   GPIO->ODR   输出寄存器,当设置端口为输出后,只要写入值后,对应的io就会输出了

(因为习惯使用msp430,所以将管脚改成了类似430里面的BIT形式。我对单片机程序最大的想法就是所有的程序都是用类似的控制方式)

很简单吧,只要在程序里这么写 GPIOC->ODR  |=GPIO_Pin_9 ; 就是将PC.9置高了,如果要置0,则是GPIOC->ODR  &=~(GPIO_Pin_9);

下面就是关于定时器了
在使用wizard的时候,定时器的配置就简单多了,需要那个定时器,就直接到wizard里面选择对应的部分了,看图

(原文件名:未命名.jpg)

配置好了后,就可以直接编写中断子程序了,具体的中断子程序的格式可以直接到使用库的里面那个stm32f10x_it.c文件下面去找。如果是定时器1
则选中   
void TIM1_UP_IRQHandler (void)
{

}

在进入中断后,有个很重要的事情一定要注意,那就是清除中断标志,具体的中断标志在什么地方,一开始我没有找到,后来我想既然给了demo,就可以到demo里面找这些中断使用的例子,因为这些例子里面就有怎样推出中断的函数,但因为是用库文件写的,所以还得打开库文件里面对应的.c,然后找到具体的函数,看到里面的寄存器使用方法,而在定时器的中断标志是
   TIM1->SR &= ~(1<<0); //我直接拷贝过来,没有仔细看。


/*------------------------------------------------------------------------------
  Timer1 Update Interrupt Handler
*------------------------------------------------------------------------------*/
void TIM1_UP_IRQHandler (void) {

  if ((TIM1->SR & 0x0001) != 0) {                 // check interrupt source

    if(flag_led)
        {
           flag_led=0;
           GPIOC->ODR &=~(BIT5);
           GPIOC->ODR |=BIT4;
        }
        else
        {
           flag_led=1;
           GPIOC->ODR |=BIT5;
           GPIOC->ODR &=~(BIT4);
        }

    TIM1->SR &= ~(1<<0);                          // clear UIF flag
}
} // end TIM1_UP_IRQHandler


最后写按键中断的编写:
  首先是确定按键接的io口且需要中断,这个时候io口的配置有两个地方,一个就是GPIO的配置,第二个就是extern interrupt/event configuration里面
  因为我使用的是万利的板子,key是在PD3,PD4,所以我先要在GPIO里面设置PD只用,然后再PIN3和PIN4里面设置输入,里面有float和pull up/down ,我使用按键是区别不是很大,但应该还是有不同的。
  在按键设置为输入后,再在中断里面进行中断配置,extern。。里面的配置有16,代表了16个pin,每个EXTIx可以从PA-PG里面选择对应的x,要记得选择上打开中断,中断是上升沿还是下降沿

(原文件名:未命名.jpg)

在配置完成后,就是EXIT中断的编写,这个和上面的类似,直接拷贝过来就可以。
void EXTI4_IRQHandler(void)
{
   GPIOC->ODR  &=~(BIT7);
   EXTI->PR = EXTI_Line4;//这一句是中断标志清除语句,这里面和的EXTI_Linex和中断函数里的一样,x可以从0-15
}

好了,先写这么多吧,上程序,嘿嘿,程序是从马老师的改过来的,大家看看。


还有对定时器的一点疑问,我的定时时间在100000以上时,LED可以正常的闪,但当小于这个值的,就会闪几次后,停下来,具体原因不是很明白,如果马老师看到了,能麻烦帮我看一下吗? 先谢谢了。

点击此处下载 ourdev_480027.rar(文件大小:376K) (原文件名:STM32_GPIO.rar)

出0入0汤圆

 楼主| 发表于 2009-9-12 00:59:17 | 显示全部楼层
自己顶下,做个沙发,嘻嘻

出0入0汤圆

发表于 2009-9-12 11:02:20 | 显示全部楼层
下了看看,謝謝.

出0入0汤圆

发表于 2009-9-12 15:55:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-13 11:16:14 | 显示全部楼层
不错,不错,但我想问一你,使用的是config wizard模式是什么意思啊?怎么用?

出0入0汤圆

发表于 2009-9-17 08:33:30 | 显示全部楼层
谢谢!收藏起来学习!

出0入0汤圆

发表于 2009-9-17 14:04:19 | 显示全部楼层
学习了

出0入0汤圆

发表于 2009-9-20 08:55:42 | 显示全部楼层
标记

出0入0汤圆

发表于 2009-9-20 08:57:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-26 14:47:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-26 15:56:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-27 15:01:05 | 显示全部楼层
配置好了后,就可以直接编写中断子程序了,具体的中断子程序的格式可以直接到使用库的里面那个stm32f10x_it.c文件下面去找。如果是定时器1
则选中     
void TIM1_UP_IRQHandler (void)  
{

}  

兄弟我就是很郁闷这个东西怎么找到啊void TIM1_UP_IRQHandler (void)

出0入0汤圆

发表于 2009-9-27 15:15:12 | 显示全部楼层
怎么我编译起来 这个BIT5未定义啊?

出0入0汤圆

发表于 2009-9-28 23:54:42 | 显示全部楼层

(原文件名:11.jpg)

BIT 是怎么定义的啊,我的是3.4版本,自己定义的吧和AVR 似的


先感谢,学习了不少,正弄定时器呢,知道在哪 不知具体操作。我修改一下

出0入0汤圆

发表于 2010-3-13 10:38:07 | 显示全部楼层
11楼
点击此处下载 ourdev_538114.rar(文件大小:3K) (原文件名:stm32f10x_it.rar)

出0入0汤圆

发表于 2010-3-13 11:15:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-19 13:29:08 | 显示全部楼层
什么意思? 我的也编译不了说,未定义 BIT5

出0入0汤圆

发表于 2010-4-25 11:48:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-25 11:53:18 | 显示全部楼层
STM32开发环境哪里有?

出0入0汤圆

发表于 2010-5-13 17:18:19 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-5-15 09:16:35 | 显示全部楼层
学习~~~

出0入0汤圆

发表于 2010-8-16 13:30:40 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-8-17 16:05:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-25 22:48:05 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-5-10 16:32:38 | 显示全部楼层
使用的是config wizard模式是什么意思啊?怎么用?????????????????????????????????

出0入0汤圆

发表于 2011-5-10 17:14:53 | 显示全部楼层
mark

出0入8汤圆

发表于 2011-7-10 21:47:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-11 11:16:54 | 显示全部楼层
应该是MDK里面的配置向导

出0入0汤圆

发表于 2011-8-22 08:44:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-22 21:23:56 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-11-28 13:48:06 | 显示全部楼层
学习了!!!!

出0入0汤圆

发表于 2011-11-28 14:29:56 | 显示全部楼层
我的STM32的板子放了N久了,是该拿出来玩玩了

出0入0汤圆

发表于 2011-11-29 11:57:45 | 显示全部楼层
。。。。未定义bit7,这些都是为了简化编程过程,在文件中定义的字节,一般用define定义的。。。如果没定义,肯定不行了。。

出0入0汤圆

发表于 2012-3-30 22:26:42 | 显示全部楼层
多谢分享。

出0入0汤圆

发表于 2012-4-13 01:21:15 | 显示全部楼层
谢谢楼主无私奉献
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 04:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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