• ARM课程发送一个字符,接收一个字符


    fun.c

    1. #include "my_typ_head.h"
    2. //初始化
    3. void uart_init()
    4. {
    5. //1.使能GPIOB/GPIOG/UART4时钟 RCC_MP_AHB4ENSETR/RCC_MP_APB1ENSETR
    6. //设置GPIOB\GPIOG控制器时钟使能 0X50000A28
    7. (*(unsigned int *)0X50000A28) |= (0X10);
    8. (*(unsigned int *)0X50000A28) |= (0X1<<6);
    9. //设置UART4时钟使能
    10. (*(unsigned int *)0X50000A00) |= (0X1<<16);
    11. //2.设置PG11/PB2为复用功能 GPIOX_MODER
    12. GPIOG->MODER &=(~(0X3<<22));
    13. GPIOG->MODER |=(0X2<<22);
    14. GPIOB->MODER &=(~(0X3<<4));
    15. GPIOB->MODER |=(0X2<<4);
    16. //3.PG11/PB2为uart4复用功能 GPIOX_AFRL/GPIOX_AFRH
    17. GPIOB->AFRL |=(0X1000<<8);
    18. GPIOG->AFRH |=(0X0110<<12);
    19. //4.设置数据位宽为8位 USART_CR1
    20. USART4->CR1 &= (~(0X1<<28));
    21. USART4->CR1 &= (~(0X1<<12));
    22. //5.设置16倍过采样USART_CR1
    23. USART4->CR1 &=(~(0X1<<15));
    24. //6.设置无校验 USART_CR1
    25. USART4->CR1 &=(~(0X1<<10));
    26. //7.设置停止位 USART_CR2
    27. USART4->CR1 &=(~(0X3<<12));
    28. //8.设置波特率 USART_BRR
    29. USART4->BRR |=(0X22B);
    30. //9.发送器使能 USART_CR1
    31. USART4->CR1 |=(0X1<<3);
    32. //10.接收器使能 USART_CR1
    33. USART4->CR1 |=(0X1<<2);
    34. //11.串口使能 USART_CR1
    35. USART4->CR1 |=(0X1);
    36. }
    37. char readchar()
    38. {
    39. char c;
    40. //1.判断接收数据寄存器数据是否准备好 USART_ISR[5]
    41. while(!(USART4->ISR&(0X1<<5)));
    42. //2.如果准备好就读取 USART_RDR
    43. c=USART4->RDR;
    44. //3.返回
    45. return c;
    46. }
    47. void sendchar(char c)
    48. {
    49. //1.判断发送数据寄存器是否不满USART_ISR[7]
    50. while(!(USART4->ISR&(0X1<<7)));
    51. //2.如果不满就写入 USART_TDR
    52. USART4->TDR=c;
    53. //3.等到发送完成后函数结束 USART_ISR[6]
    54. while(!(USART4->ISR&(0X1<<6)));
    55. }

    main.c

    1. #include "my_typ_head.h"
    2. int main()
    3. {
    4. //初始化
    5. uart_init();
    6. char c='A';
    7. while(1)
    8. {
    9. //2.接收一个字节数据
    10. readchar();
    11. //3.发送一个字节数据
    12. sendchar(c);
    13. }
    14. return 0;
    15. }

    head.h

    1. #ifndef __GPIO_H__
    2. #define __GPIO_H__
    3. #include "/home/ubuntu/xiangmu/kaifaban_c/02-c/common/include/stm32mp1xx_gpio.h"
    4. #include "/home/ubuntu/xiangmu/kaifaban_c/02-c/common/include/stm32mp1xx_rcc.h"
    5. #include "/home/ubuntu/xiangmu/kaifaban_c/02-c/common/include/stm32mp1xx_uart.h"
    6. void uart_init();
    7. char readchar();
    8. void sendchar(char c);
    9. #endif //__GPIO_H__

  • 相关阅读:
    pandas读取json文件,文件中包含多个json对象
    Java反序列化
    07 Spring事务
    CSDN博客运营团队2022年H1总结
    基于神经网络的柯氏音血压计
    小米妙享无法正常启动,用非管理员权限启动
    Android问题笔记四十五:解决SeekBar操作thumb周围产生的圆形阴影/灰色阴影/白色圆圈的解决办法
    python - random模块随机数常用方法
    军队状态出现的六种结果,是将帅的过失
    Apifox很难不爱
  • 原文地址:https://blog.csdn.net/m0_61834469/article/details/134387284