发 帖  
原厂入驻New

[经验] 【雨的笔记】STM32F1系列部分程序汇总-----------定时器

2019-12-26 19:41:55  471 STM32F103 定时器
分享
0
在之前的工程里加入定时器
配置:
定时器3通道1:(当然直接复用其他的定时器通道都可以)

重映射PC6、复用推挽输出、向上计数模式,计数时间1s,开启中断
功能:
每过1s向串口发送一组数据、在上一次的串口程序usart.c中编写了一个发送一行字符串的函数
名为print
  1. char *string = "2246517915";
  2. void print(char *string)
  3. {
  4.         char *str =  string;
  5.         while(*str != '\0')
  6.         {
  7.                 USART_SendData(USART1,*(str++));
  8.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
  9.                
  10.         }
  11.         USART_SendData(USART1,0x0d);
  12.         while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
  13.         USART_SendData(USART1,0x0a);
  14.         while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
  15. }
复制代码
timer.h
  1. #IFndef  _TIMER_H_
  2. #define  _TIMER_H_

  3. #include "STM32f10x.h"

  4. void timer3_ch1_init(int count,int frequeny);

  5. #endif
复制代码
timer.c
  1. #include "timer.h"
  2. #include "usart.h"

  3. char *string = "2246517915";

  4. void timer3_ch1_init(int count,int frequeny)
  5. {
  6.         GPIO_InitTypeDef GPIO_INIT_TIM3;
  7.         TIM_TimeBaseInitTypeDef TIM3_TimeBase_CH1;
  8.         NVIC_InitTypeDef NVIC_TIM3;
  9.         
  10.         RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  12.         
  13.         GPIO_INIT_TIM3.GPIO_Mode = GPIO_Mode_AF_PP;
  14.         GPIO_INIT_TIM3.GPIO_Pin  = GPIO_Pin_6;
  15.         GPIO_INIT_TIM3.GPIO_Speed= GPIO_Speed_50MHz;
  16.         GPIO_Init(GPIOC,&GPIO_INIT_TIM3);
  17.         
  18.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
  19.         
  20.         TIM3_TimeBase_CH1.TIM_ClockDivision            = TIM_CKD_DIV1;
  21.         TIM3_TimeBase_CH1.TIM_CounterMode                    = TIM_CounterMode_Up;
  22.         TIM3_TimeBase_CH1.TIM_Period                                                 = count;
  23.         TIM3_TimeBase_CH1.TIM_Prescaler                       = frequeny;

  24.         TIM_TimeBaseInit(TIM3,&TIM3_TimeBase_CH1);
  25.          
  26.         NVIC_TIM3.NVIC_IRQChannel                   = TIM3_IRQn;
  27.         NVIC_TIM3.NVIC_IRQChannelCmd                = ENABLE;
  28.         NVIC_TIM3.NVIC_IRQChannelPreemptionPriority = 0;
  29.         NVIC_TIM3.NVIC_IRQChannelSubPriority        = 1;

  30.         NVIC_Init(&NVIC_TIM3);
  31.         TIM_Cmd(TIM3,ENABLE);
  32.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
  33.         
  34. }

  35. void TIM3_IRQHandler()
  36. {
  37.         if(TIM_GetITStatus(TIM3,TIM_IT_Update))
  38.         {
  39.                 print(string);
  40.         }
  41.         TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
  42. }

复制代码
main.c
  1. #include "stm32f10x.h"
  2. #include "LED.h"
  3. #include "beep.h"
  4. #include "delay.h"
  5. #include "key.h"
  6. #include "usart.h"
  7. #include "timer.h"

  8. int main(void)
  9. {
  10.         unsigned int key_value;
  11.         led_init();
  12.         //beep_init();
  13.         delay_init();
  14.         key_init();
  15.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
  16.         usart_init(115200);
  17.         timer3_ch1_init(9999,7199);
  18.         while(1)
  19.         {
  20.                 key_value = key_scan();
  21.                 key_debounce(key_value);
  22.                 USART1_DEAL();
  23.         }
  24. }


复制代码
结果
[NMH({TP4ACUUINK(AJ7I~0.png
发送字符串也会出现在串口助手上,不影响定时输出string字符串
且自动换行
74VL27ZPNIMN~AI~SF$RU(A.png

相关经验

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
关闭

站长推荐 上一条 /6 下一条

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