初级会员

- 积分
- 156
- 金钱
- 156
- 注册时间
- 2021-7-22
- 在线时间
- 28 小时
|
3金钱
本帖最后由 北极星8 于 2021-8-19 16:13 编辑
这个串口通信我并没有按照正点原子的例程来做,而是参照了别的教程,但是内核和道理都是相近的。
以下是uart.h ,uart.c ,main.c三个文件中的代码。
uart.h的代码如下:
- #ifndef _UART_H
- #define _UART_H
- #include "stm32f10x.h"
- void Init_UART(void);
- void UART_SendByte(USART_TypeDef * USARTx, uint8_t data);
- void UART_SendString(USART_TypeDef * USARTx, char* string);
- #endif
复制代码 uart.c的代码如下:
- #include "uart.h"
- void Init_UART(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- USART_InitTypeDef USART_InitStruct;
-
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
- RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
- GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- USART_InitStruct.USART_BaudRate = 115200;
- USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_InitStruct.USART_Parity = USART_Parity_No;
- USART_InitStruct.USART_StopBits = USART_StopBits_1;
- USART_InitStruct.USART_WordLength = USART_WordLength_8b;
- USART_Init(USART1, &USART_InitStruct);
-
- USART_Cmd(USART1, ENABLE);
-
- }
- void UART_SendByte(USART_TypeDef * USARTx,uint8_t data)
- {
- USART_SendData(USARTx, data);
- while(!USART_GetFlagStatus(USARTx, USART_FLAG_TXE));
- }
- void UART_SendString(USART_TypeDef * USARTx, char* string)
- {
- char *str = string;
- while(*str)
- {
- UART_SendByte(USARTx, *str);
- str++;
-
- }
- }
复制代码 main.c的代码如下:
- #include "stm32f10x.h"
- #include "uart.h"
- void delay(uint32_t i)
- {
- while(i--);
- }
- int main(void)
- {
- while(1)
- {
- UART_SendString(USART1, "Hello,world!\r\n");
- delay(0xFFFF);
- }
-
- }
复制代码 以上代码的预期结果应该是会在窗口不断打印出Hello,world!,但是却显示出如下的乱码:
感觉显示乱码就无从下手了,求解疑!
|
|