• 十一月29号作业


    uart4.h

    1. #ifndef __UART4_H__
    2. #define __UART4_H__
    3. #include"stm32mp1xx_gpio.h"
    4. #include"stm32mp1xx_uart.h"
    5. #include"stm32mp1xx_rcc.h"
    6. //UART串口初始化
    7. void hal_uart_init(void);
    8. //发送一个字符
    9. void hal_put(const char str);
    10. //发送一个字符串
    11. void hal_put_string(const char* string);
    12. //接受一个字符
    13. char get_char(void);
    14. //接收一个字符串
    15. char* get_string(void);
    16. #endif

    uart4.c

    1. #include "uart4.h"
    2. //UART4串口初始化
    3. void hal_uart_init(void)
    4. {
    5. //RCC相关寄存器初始化
    6. RCC->MP_AHB4ENSETR |=(0x1<<1);
    7. RCC->MP_AHB4ENSETR |=(0x1<<6);
    8. RCC->MP_APB1ENSETR|=(0x1<<16);
    9. //GPIO相关寄存器初始化
    10. GPIOG->MODER &=(~(0x3<<4));
    11. GPIOG->MODER |=(0x1<<5);
    12. GPIOB->AFRL &=(~(0xF<<8));
    13. GPIOB->AFRL |=(0x1<<11);
    14. GPIOB->MODER &=(~(0x3<<22));
    15. GPIOB->MODER |=(0x1<<23);
    16. GPIOG->AFRH &=(~(0xF<<12));
    17. GPIOG->AFRH |=(0x3<<13);
    18. USART4->CR1 &=(~(0x1 << 0));
    19. USART4->CR1 &=(~(0x1<<12));
    20. USART4->CR1 &=(~(0x1<<28));
    21. USART4->CR1 &=(~(0x1<<10));
    22. USART4->CR2 &=(~(0x3<<12));
    23. USART4->CR1 &=(~(0x1<<15));
    24. USART4->PRESC &=(~(0xf<<4));
    25. USART4 ->BRR =0x22b;
    26. USART4->CR1 &=(~(0x3 << 2));
    27. USART4->CR1 |=(0x3 << 2);
    28. USART4->CR1 |=(0x1<<0);
    29. }
    30. //发送一个字符
    31. void hal_put(const char str)
    32. {
    33. //判断发送数据寄存器是否有有数据
    34. while(!(USART4->ISR & (0x1 << 7)));
    35. //当发射器为空时才可以发送下一个字符,否则要等待
    36. //清空
    37. USART4->TDR &= (~(0xff <<0));
    38. USART4->TDR = str;
    39. while(!(USART4->ISR & (0x1 <<6)));
    40. //判断数据是否发送完成
    41. //判断发送数据寄存器是否发送完成
    42. }
    43. //发送一个字符串
    44. void hal_put_string(const char* string)
    45. {
    46. //判断字符结束标志
    47. while(*string)
    48. {
    49. hal_put(*string++);
    50. }
    51. hal_put('\n');
    52. hal_put('\r');
    53. }
    54. //接受一个字符
    55. char get_char(void)
    56. {
    57. //判断接受数据寄存器是否接收到数据
    58. char ch=0;
    59. while(!(USART4->ISR & (0x1 <<5)));
    60. ch=USART4->RDR;
    61. return ch;
    62. }
    63. //接收一个字符串
    64. char string[50] = {0};
    65. char* get_string(void)
    66. {
    67. //键盘的回车建按下,对应的字符'\r'
    68. int i=0;
    69. while((string[i] = get_char()) != '\r')
    70. {
    71. hal_put(string[i]);
    72. i++;
    73. }
    74. string[i]='\0';
    75. hal_put('\n');
    76. hal_put('\r');
    77. return string;
    78. }

    main.c

    1. #include "uart4.h"
    2. #include"stm32mp1xx_gpio.h"
    3. #include"stm32mp1xx_uart.h"
    4. #include"stm32mp1xx_rcc.h"
    5. extern void printf(const char *fmt, ...);
    6. void delay_ms(int ms)
    7. {
    8. int i,j;
    9. for(i = 0; i < ms;i++)
    10. for (j = 0; j < 1800; j++);
    11. }
    12. int main()
    13. {
    14. hal_uart_init();
    15. hal_put_string("uart4 test !!!!");
    16. while(1)
    17. {
    18. //hal_put_string(get_string());
    19. hal_put(get_char()+1);
    20. }
    21. return 0;
    22. }

  • 相关阅读:
    Win11 Dev预览版25201.1000(rs_prerelease)发布:迎来全屏小组件
    cmd命令行工具
    图像风格迁移的发展历程
    Rust Rocket简单入门
    毕业设计opencv 图像识别 指纹识别 - python
    数据脱敏的场景与价值【总结】
    ES在linux下安装(单机版)
    关于 SAP UI5 应用 ui5.yaml 里的 paths 映射问题
    .Net基于NetCoreKevin框架 AI 与 Hangfire 集成:实现AI智能自动任务调度
    Javaweb-表单重复提交情况
  • 原文地址:https://blog.csdn.net/fantongtong12138/article/details/128106222