• ARM蜂鸣器,风扇,马达


    1. #include "pwm.h"
    2. //蜂鸣器
    3. void hal_pwm_init(void)
    4. {
    5. //设置gpiob使能
    6. RCC->MP_AHB4ENSETR = (0x1 << 1);
    7. //设置TIM4使能
    8. RCC->MP_APB1ENSETR = (0x1 << 2);
    9. //设置pb6引脚为复用功能
    10. GPIOB->MODER &= (~(0x3<<12));
    11. GPIOB->MODER |= (0x2 << 12);
    12. //设置pb6引脚为TIM4_CH1功能
    13. GPIOB->AFRL &= (~(0xf << 24));
    14. GPIOB->AFRL |= (0x2 << 24);
    15. //设置预分频寄存器
    16. TIM4->PSC = 209 - 1;
    17. //设置PWM方波的最终的周期
    18. TIM4->ARR = 1000;
    19. //设置PWM方波的占空比
    20. TIM4->CCR1 = 700;
    21. //设置TIM4_CH1通道为PWM1模式
    22. TIM4->CCMR1 &= ~((0x1 << 16) | (0x7 << 4));
    23. TIM4->CCMR1 |= (0x6 << 4);
    24. //设置TIM4_CH1通道使能TIMx_CCR1预加载使能寄存器
    25. TIM4->CCMR1 |= (0x1 << 3);
    26. //设置TIM4_CH1通道输出PWM方波的极性,
    27. TIM4->CCER &= ~(0x1 << 1);
    28. //设置TIM4_CH1通道的输出使能位,输出PWM方波
    29. TIM4->CCER |= (0x1 << 0);
    30. //设置TIM4_CH1通道的TIMx_ARR预装载寄存器的缓冲区的使能
    31. TIM4->CR1 |= (0x1 << 7);
    32. //设置定时器的计数方式,边沿对齐
    33. TIM4->CR1 &= ~(0x3 << 5);
    34. //设置定时器计数的方向,采用递减计数/递增计数
    35. TIM4->CR1 &= ~(0x1 << 4);
    36. // 使能TIM4_CH1计数器
    37. TIM4->CR1 |= (0x1 << 0);
    38. }
    39. //风扇PE9
    40. void hal_fan_init(void)
    41. {
    42. //设置gpiob使能
    43. RCC->MP_AHB4ENSETR = (0x1 << 4);
    44. //设置TIM1使能
    45. RCC->MP_APB2ENSETR = (0x1 << 0);
    46. //设置PE9引脚为复用功能
    47. GPIOE->MODER &= (~(0x3<<18));
    48. GPIOE->MODER |= (0x2 << 18);
    49. //设置pe9引脚为TIM4_CH1功能
    50. GPIOE->AFRH &= (~(0xf << 4));
    51. GPIOE->AFRH |= (0x1 << 4);
    52. //设置预分频寄存器
    53. TIM1->PSC = 209 - 1;
    54. //设置PWM方波的最终的周期
    55. TIM1->ARR = 1000;
    56. //设置PWM方波的占空比
    57. TIM1->CCR1 = 700;
    58. //设置TIM1_CH1通道为PWM1模式
    59. TIM1->CCMR1 &= ~((0x1 << 16) | (0x7 << 4));
    60. TIM1->CCMR1 |= (0x6 << 4);
    61. //设置TIM1_CH1通道使能TIMx_CCR1预加载使能寄存器
    62. TIM1->CCMR1 |= (0x1 << 3);
    63. //设置TIM1_CH1通道输出PWM方波的极性,
    64. TIM1->CCER &= ~(0x1 << 1);
    65. //设置TIM1_CH1通道的输出使能位,输出PWM方波
    66. TIM1->CCER |= (0x1 << 0);
    67. //设置TIM1_CH1通道的TIMx_ARR预装载寄存器的缓冲区的使能
    68. TIM1->CR1 |= (0x1 << 7);
    69. //设置定时器的计数方式,边沿对齐
    70. TIM1->CR1 &= ~(0x3 << 5);
    71. //设置定时器计数的方向,采用递减计数/递增计数
    72. TIM1->CR1 &= ~(0x1 << 4);
    73. // 使能TIM1_CH1计数器
    74. TIM1->CR1 |= (0x1 << 0);
    75. //风扇寄存器
    76. TIM1->BDTR |= (0x1 << 15);
    77. }
    78. //马达
    79. void hal_monitor_init(void)
    80. {
    81. //设置gpiob使能
    82. RCC->MP_AHB4ENSETR = (0x1 << 5);
    83. //设置TIM4使能
    84. RCC->MP_APB2ENSETR = (0x1 << 3);
    85. //设置pf6引脚为复用功能
    86. GPIOF->MODER &= (~(0x3<<12));
    87. GPIOF->MODER |= (0x2 << 12);
    88. //设置pf6引脚为TIM4_CH1功能
    89. GPIOF->AFRL &= (~(0xf << 24));
    90. GPIOF->AFRL |= (0x1 << 24);
    91. //设置预分频寄存器
    92. TIM16->PSC = 209 - 1;
    93. //设置PWM方波的最终的周期
    94. TIM16->ARR = 1000;
    95. //设置PWM方波的占空比
    96. TIM16->CCR1 = 700;
    97. //设置TIM16_CH1通道为PWM1模式
    98. TIM16->CCMR1 &= ~((0x1 << 16) | (0x7 << 4));
    99. TIM16->CCMR1 |= (0x6 << 4);
    100. //设置TIM16_CH1通道使能TIMx_CCR1预加载使能寄存器
    101. TIM16->CCMR1 |= (0x1 << 3);
    102. //设置TIM16_CH1通道输出PWM方波的极性,
    103. TIM16->CCER &= ~(0x1 << 1);
    104. //设置TIM16_CH1通道的输出使能位,输出PWM方波
    105. TIM16->CCER |= (0x1 << 0);
    106. //设置TIM16_CH1通道的TIMx_ARR预装载寄存器的缓冲区的使能
    107. TIM16->CR1 |= (0x1 << 7);
    108. //设置定时器的计数方式,边沿对齐
    109. TIM16->CR1 &= ~(0x3 << 5);
    110. //设置定时器计数的方向,采用递减计数/递增计数
    111. TIM16->CR1 &= ~(0x1 << 4);
    112. // 使能TIM16_CH1计数器
    113. TIM16->CR1 |= (0x1 << 0);
    114. //马达寄存器
    115. TIM16->BDTR |= (0x1 << 15);
    116. }

  • 相关阅读:
    js字符串处理
    java毕业设计企业安全与设备管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
    记录一下~~~Linux配置定时任务备份数据库dmp文件
    VideoMAE复现之SSV2数据集解压(Linux)、webm转mp4格式
    集合框架----源码解读HashSet篇
    一、Clion和STM32CubeMx---点亮LED(案例程序)
    【Golang开发面经】蔚来(两轮技术面)
    位运算技巧及leetcode相关例题Java实现
    最新版MySQL 8.0 的下载与安装(详细教程)
    YMatrix 5.0 与天翼云完成产品兼容性认证
  • 原文地址:https://blog.csdn.net/Pointerup/article/details/128193399