MoistureSoftware/Source/usart.c

149 lines
5.4 KiB
C
Raw Permalink Normal View History

2025-09-28 09:17:22 +00:00
/**************** (C) COPYRIGHT 2023 ɽ<><C9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܿƼ<DCBF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ *******************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: Kaiser
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> :
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>:
*********************************** <EFBFBD>޶<EFBFBD><EFBFBD><EFBFBD>¼ ************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>:
* <EFBFBD>޶<EFBFBD><EFBFBD><EFBFBD>:
********************************************************************************/
/******************************** <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *************************************
*
*******************************************************************************/
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file usart.c
* @brief This file provides code for the configuration
* of the USART instances.
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/******************************** <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void BIOS_USART3_Init(void)
{
USART_TypeDef *USARTx = USART3;
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);
// USART1 configured as follow:
// - BaudRate = 9600 baud
// - Word Length = 8 Bits
// - One Stop Bit
// - No parity
// - Hardware flow control disabled (RTS and CTS signals)
// - Receive disable and transmit enabled
USARTx->BRR = SystemCoreClock / 9600u / 2u; /* 115200 bps */
USARTx->CR1 = 0x0000u; /* 1 start bit, 8 data bits */
USARTx->CR2 = 0x0000u; /* 1 stop bit */
USARTx->CR3 = 0x0000u; /* no flow control */
SET_BIT(USARTx->CR1, USART_CR1_TE); /* enable TX */
SET_BIT(USARTx->CR1, USART_CR1_RE); /* enable TX */
SET_BIT(USARTx->CR1, USART_CR1_UE); /* Enable USARTx */
USART_ITConfig(USART3, /*USART_IT_TXE |*/ USART_IT_RXNE, ENABLE);
/* Configure USART1 Rx (PA10) as input floating */
/* Configure USART1 Tx (PA9) as alternate function push-pull */
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN);
MODIFY_REG(GPIOB->CRH, 0x0000FF00u, 0x00004B00u);
NVIC_EnableIRQ(USART3_IRQn);
}
/******************************** <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> USART3<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>RS232<EFBFBD>շ<EFBFBD>
*******************************************************************************/
void UART3_Send(uint8_t OutByte)
{
USART_TypeDef *USARTx = USART3;
while (!(READ_BIT(USARTx->SR, USART_SR_TXE))) {
;
}
USARTx->DR = OutByte;
}
/******************************** <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> USART3<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>RS232<EFBFBD>շ<EFBFBD>
*******************************************************************************/
uint8_t UART3_Received(void)
{
USART_TypeDef *USARTx = USART3;
while (!(READ_BIT(USARTx->SR, USART_SR_RXNE))) {
;
}
return USARTx->DR;
}
/******************************** <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void BIOS_USART2_Init(uint32_t baudrate)
{
USART_TypeDef *USARTx = USART2;
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);
// USART1 configured as follow:
// - BaudRate = 9600 baud
// - Word Length = 8 Bits
// - One Stop Bit
// - No parity
// - Hardware flow control disabled (RTS and CTS signals)
// - Receive disable and transmit enabled
USARTx->BRR = SystemCoreClock / baudrate / 2u; /* 115200 bps */
USARTx->CR1 = 0x0000u; /* 1 start bit, 8 data bits */
USARTx->CR2 = 0x0000u; /* 1 stop bit */
USARTx->CR3 = 0x0000u; /* no flow control */
SET_BIT(USARTx->CR1, USART_CR1_TE); /* enable TX */
SET_BIT(USARTx->CR1, USART_CR1_RE); /* enable TX */
SET_BIT(USARTx->CR1, USART_CR1_UE); /* Enable USARTx */
/* Configure USART1 Rx (PA10) as input floating */
/* Configure USART1 Tx (PA9) as alternate function push-pull */
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN);
MODIFY_REG(GPIOA->CRL, 0x0000FF00u, 0x00004B00u);
}
/******************************** <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> USART2<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>TTL<EFBFBD><EFBFBD>
*******************************************************************************/
void USART2_Send(uint8_t OutByte)
{
USART_TypeDef *USARTx = USART2;
while (!(READ_BIT(USARTx->SR, USART_SR_TXE))) {
;
}
USARTx->DR = OutByte;
}
extern void delay_us(uint32_t us);
void USART2Print(uint8_t *buffer, uint8_t lenth)
{
uint8_t i;
for (i = 0u; i < lenth; i++) {
USART2_Send(*buffer++);
while (!READ_BIT(USART2->SR, USART_SR_TC))
delay_us(50u);
}
}
/******** (C) COPYRIGHT 2023 ɽ<><C9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܿƼ<DCBF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ **** End Of File ********/