主页 > 互联网  > 

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

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

fun.c

#include "my_typ_head.h" //初始化 void uart_init() { //1.使能GPIOB/GPIOG/UART4时钟 RCC_MP_AHB4ENSETR/RCC_MP_APB1ENSETR //设置GPIOB\GPIOG控制器时钟使能 0X50000A28 (*(unsigned int *)0X50000A28) |= (0X10); (*(unsigned int *)0X50000A28) |= (0X1<<6); //设置UART4时钟使能 (*(unsigned int *)0X50000A00) |= (0X1<<16); //2.设置PG11/PB2为复用功能 GPIOX_MODER GPIOG->MODER &=(~(0X3<<22)); GPIOG->MODER |=(0X2<<22); GPIOB->MODER &=(~(0X3<<4)); GPIOB->MODER |=(0X2<<4); //3.PG11/PB2为uart4复用功能 GPIOX_AFRL/GPIOX_AFRH GPIOB->AFRL |=(0X1000<<8); GPIOG->AFRH |=(0X0110<<12); //4.设置数据位宽为8位 USART_CR1 USART4->CR1 &= (~(0X1<<28)); USART4->CR1 &= (~(0X1<<12)); //5.设置16倍过采样USART_CR1 USART4->CR1 &=(~(0X1<<15)); //6.设置无校验 USART_CR1 USART4->CR1 &=(~(0X1<<10)); //7.设置停止位 USART_CR2 USART4->CR1 &=(~(0X3<<12)); //8.设置波特率 USART_BRR USART4->BRR |=(0X22B); //9.发送器使能 USART_CR1 USART4->CR1 |=(0X1<<3); //10.接收器使能 USART_CR1 USART4->CR1 |=(0X1<<2); //11.串口使能 USART_CR1 USART4->CR1 |=(0X1); } char readchar() { char c; //1.判断接收数据寄存器数据是否准备好 USART_ISR[5] while(!(USART4->ISR&(0X1<<5))); //2.如果准备好就读取 USART_RDR c=USART4->RDR; //3.返回 return c; } void sendchar(char c) { //1.判断发送数据寄存器是否不满USART_ISR[7] while(!(USART4->ISR&(0X1<<7))); //2.如果不满就写入 USART_TDR USART4->TDR=c; //3.等到发送完成后函数结束 USART_ISR[6] while(!(USART4->ISR&(0X1<<6))); }

main.c

#include "my_typ_head.h" int main() { //初始化 uart_init(); char c='A'; while(1) { //2.接收一个字节数据 readchar(); //3.发送一个字节数据 sendchar(c); } return 0; }

head.h

#ifndef __GPIO_H__ #define __GPIO_H__ #include "/home/ubuntu/xiangmu/kaifaban_c/02-c/common/include/stm32mp1xx_gpio.h" #include "/home/ubuntu/xiangmu/kaifaban_c/02-c/common/include/stm32mp1xx_rcc.h" #include "/home/ubuntu/xiangmu/kaifaban_c/02-c/common/include/stm32mp1xx_uart.h" void uart_init(); char readchar(); void sendchar(char c); #endif //__GPIO_H__

标签:

ARM课程发送一个字符,接收一个字符由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“ARM课程发送一个字符,接收一个字符