• 2022-11-27 ARM- 用C语言实现stm32的三盏灯的点亮


    1. 头文件

    1. #ifndef __LED_H__
    2. #define __LED_H__
    3. //结构体封装
    4. /*LED1*/
    5. typedef struct
    6. {
    7. volatile unsigned int MODER;
    8. volatile unsigned int OTYPER;
    9. volatile unsigned int OSPEED;
    10. volatile unsigned int PUPDR;
    11. volatile unsigned int IDR;
    12. volatile unsigned int ODR;
    13. }gpio_t;
    14. #define GPIOE ((gpio_t*)0x50006000)
    15. #define GPIOF ((gpio_t*)0x50007000)
    16. //LED1灯初始化
    17. void led1_init(void);
    18. //LED1灯点亮
    19. void led1_on(void);
    20. //LED1灯熄灭
    21. void led1_off(void);
    22. //LED2灯初始化
    23. void led2_init(void);
    24. //LED2灯的点亮
    25. void led2_on(void);
    26. //LED2灯的熄灭
    27. void led2_off(void);
    28. //LED3灯初始化
    29. void led3_init(void);
    30. //LED3灯的点亮
    31. void led3_on(void);
    32. //LED3灯的熄灭
    33. void led3_off(void);
    34. #endif

    2.功能函数

    1. #include "led.h"
    2. //LED1灯初始化
    3. void led1_init(void)
    4. {
    5. //1.设置GPIOE控制器使能
    6. *(volatile unsigned int*)0x50000A28 |= (0x1 << 4);
    7. //2.设置PE10引脚为输出模式
    8. GPIOE->MODER &= (~(0x3 << 20));
    9. GPIOE->MODER |= (0x1 << 20);
    10. //3.设置PE10引脚为推晚输出模式
    11. GPIOE->OTYPER &= (~(0x1 << 10));
    12. //4.设置PE10引脚为低速输出
    13. GPIOE->OSPEED &= (~(0x3 << 20));
    14. //5.设置PE10引脚禁止上下拉电阻
    15. GPIOE->PUPDR &= (~(0x3 << 20));
    16. }
    17. //LED1灯点亮
    18. void led1_on(void)
    19. {
    20. //1.设置PE10引脚输出高电平
    21. GPIOE->ODR |= (0x1 << 10);
    22. }
    23. //LED1灯熄灭
    24. void led1_off(void)
    25. {
    26. //1.设置PE10引脚输出低电平
    27. GPIOE->ODR &= (~(0x1 << 10));
    28. }
    29. //LED2灯初始化
    30. void led2_init(void)
    31. {
    32. //1.设置GPIOF控制器使能
    33. *(volatile unsigned int*)0x50000A28 |= (0x1 << 5);
    34. //2.设置PF10引脚为输出模式
    35. GPIOF->MODER &= (~(0x3 << 20));
    36. GPIOF->MODER |= (0x1 << 20);
    37. //3.设置PF10的引脚为推挽输出模式
    38. GPIOF->OTYPER &= (~(0x3 << 20));
    39. //4.设置PF10引脚为低速输出
    40. GPIOF->OSPEED &= (~(0x3 << 20));
    41. //设置PF10引脚进制上下拉电阻
    42. GPIOF->PUPDR &= (~(0x3 << 20));
    43. }
    44. //LED2灯的点亮
    45. void led2_on(void)
    46. {
    47. GPIOF->ODR |= (0x1 << 10);
    48. }
    49. //LED2灯的熄灭
    50. void led2_off(void)
    51. {
    52. GPIOF->ODR &= (~(0x1 << 10));
    53. }
    54. //LED3灯初始化
    55. void led3_init(void)
    56. {
    57. //1.设置GPIOE控制器是使能
    58. *(volatile unsigned int*)0x50000A28 |= (0x1 << 4);
    59. //2.设置PE8为输出模式
    60. GPIOE->MODER &= (~(0x3 << 16));
    61. GPIOE->MODER |= (0x1 << 16);
    62. //3.设置PE8为推挽输出
    63. GPIOE->OTYPER &= (~(0x1 << 8));
    64. //4.设置PE8为低速运行
    65. GPIOE->OSPEED &= (~(0x3 << 16));
    66. //5.设置PE8进制上下拉电阻
    67. GPIOE->PUPDR &= (~(0x3 << 16));
    68. }
    69. //LED3灯的点亮
    70. void led3_on(void)
    71. {
    72. GPIOE->ODR |= (0x1 << 8);
    73. }
    74. //LED3灯的熄灭
    75. void led3_off(void)
    76. {
    77. GPIOE->ODR &= (~(0x1 << 8));
    78. }

    3.测试函数

     

    1. #include "led.h"
    2. extern void printf(const char *fmt, ...);
    3. void delay_ms(int ms)
    4. {
    5. int i,j;
    6. for(i = 0; i < ms;i++)
    7. for (j = 0; j < 1800; j++);
    8. }
    9. int main()
    10. {
    11. led1_init();
    12. led2_init();
    13. led3_init();
    14. while(1)
    15. {
    16. led1_on();
    17. delay_ms(500);
    18. led1_off();
    19. delay_ms(500);
    20. led2_on();
    21. delay_ms(500);
    22. led2_off();
    23. delay_ms(500);
    24. led3_on();
    25. delay_ms(500);
    26. led3_off();
    27. delay_ms(500);
    28. }
    29. return 0;
    30. }

     

  • 相关阅读:
    flutter项目常用组件
    八数码—unordered哈希表即记录步骤—A*算法—曼哈顿距离—BFS
    合宙AIR105(三): 定时器, 定时器中断和PWM输出
    深度学习模型在训练集上表现良好,但在测试集上表现较差,可能原因
    数据库实验二:图书信息管理系统数据查询与数据更新
    【洛谷】P3377 【模板】左偏树(可并堆)
    融合关键点属性与注意力表征的人脸表情识别--2021.高红霞
    解决serviceaccount用户认证挂载密文token文件失败导致pod使用anonymous用户问题
    【雷达】基于TI毫米波雷达IWR6843ISK实现室内人员检测附matlab代码
    Hive元数据服务以及hiveserver2脚本封装---大数据之Hive工作笔记0011
  • 原文地址:https://blog.csdn.net/weixin_62323204/article/details/128069782