MiaoUI/HARDWARE/uart/bsp_usart.c

160 lines
4.0 KiB
C
Raw Normal View History

2023-06-30 04:50:02 +00:00
#include "bsp_usart.h"
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NVIC
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Ƕ<><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϿ<D0B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1> */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* <20><><EFBFBD><EFBFBD>USARTΪ<54>ж<EFBFBD>Դ */
NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* <20><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD> */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* ʹ<><CAB9><EFBFBD>ж<EFBFBD> */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NVIC */
NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief USART GPIO <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// <20>򿪴<EFBFBD><F2BFAAB4><EFBFBD>GPIO<49><4F>ʱ<EFBFBD><CAB1>
DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
// <20>򿪴<EFBFBD><F2BFAAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
// <20><>USART Tx<54><78>GPIO<49><4F><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><ECB8B4>ģʽ
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
// <20><>USART Rx<52><78>GPIO<49><4F><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڵĹ<DAB5><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD>
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
// <20><><EFBFBD><EFBFBD>ֹͣλ
USART_InitStructure.USART_StopBits = USART_StopBits_1;
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>λ
USART_InitStructure.USART_Parity = USART_Parity_No ;
// <20><><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
// <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>շ<EFBFBD>һ<EFBFBD><D2BB>
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
// <20><><EFBFBD>ɴ<EFBFBD><C9B4>ڵij<DAB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_Init(DEBUG_USARTx, &USART_InitStructure);
// <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
NVIC_Configuration();
// ʹ<>ܴ<EFBFBD><DCB4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ж<EFBFBD>
USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
// ʹ<>ܴ<EFBFBD><DCB4><EFBFBD>
USART_Cmd(DEBUG_USARTx, ENABLE);
}
/***************** <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD> **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݵ<EFBFBD>USART */
USART_SendData(pUSARTx,ch);
/* <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD>Ϊ<EFBFBD><CEAA> */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}
/****************** <20><><EFBFBD><EFBFBD><38><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ************************/
void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num)
{
uint8_t i;
for(i=0; i<num; i++)
{
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݵ<EFBFBD>USART */
Usart_SendByte(pUSARTx,array[i]);
}
/* <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
}
/***************** <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{
unsigned int k=0;
do
{
Usart_SendByte( pUSARTx, *(str + k) );
k++;
} while(*(str + k)!='\0');
/* <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
{}
}
/***************** <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>16λ<36><CEBB> **********************/
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch)
{
uint8_t temp_h, temp_l;
/* ȡ<><C8A1><EFBFBD>߰<EFBFBD>λ */
temp_h = (ch&0XFF00)>>8;
/* ȡ<><C8A1><EFBFBD>Ͱ<EFBFBD>λ */
temp_l = ch&0XFF;
/* <20><><EFBFBD>͸߰<CDB8>λ */
USART_SendData(pUSARTx,temp_h);
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
/* <20><><EFBFBD>͵Ͱ<CDB5>λ */
USART_SendData(pUSARTx,temp_l);
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}
///<2F>ض<EFBFBD><D8B6><EFBFBD>c<EFBFBD><EFBFBD><E2BAAF>printf<74><66><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>printf<74><66><EFBFBD><EFBFBD>
int fputc(int ch, FILE *f)
{
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD> */
USART_SendData(DEBUG_USARTx, (uint8_t) ch);
/* <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);
return (ch);
}
///<2F>ض<EFBFBD><D8B6><EFBFBD>c<EFBFBD><EFBFBD><E2BAAF>scanf<6E><66><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>scanf<6E><66>getchar<61>Ⱥ<EFBFBD><C8BA><EFBFBD>
int fgetc(FILE *f)
{
/* <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(DEBUG_USARTx);
}