当前位置:首页 > STM32 例程 串口实验
/*----------------------------------------------------------------------------------------------------- // 功能描述 清除USARTx的中断挂起位
// 输入参数 USARTx:选择USART或 UART 外设 // 可以是下列值之一:
// USART1,USART2,USART3,UART4 或 UART5 // 输入参数 USART_IT:待清除的USART中断挂起位 // 可以是下列值之一: // USART_ IT _CTS: CTS 变化中断(UART4 和 UART5不可用) // USART_ IT _LBD: LIN 断开检测中断 // USART_ IT _TC: 发送完成中断 // USART_ IT _RXNE: 接收数据寄存器非空中断 //
// 注意
// - PE(校验错误),FE(帧错误),NE(噪声错误),ORE(上溢错误) // 和IDLE(空闲帧检测)挂起位通过软件时序被清除:
// 一个对USART_SR 寄存器的读操作(USART_GetFlagStatus())
// 后跟一个对USART_DR 寄存器的读操作 (USART_ReceiveData())。 // - RXNE 挂起位也可以通过读USART_DR 寄存器被清除(USART_ReceiveData())。
// - TC 挂起位也可以通过软件时序被清除:
// 一个对USART_SR 寄存器的读操作(USART_GetFlagStatus()) // 后跟一个对USART_DR 寄存器的写操作(USART_SendData())。
// - TXE标志只能通过写USART_DR 寄存器被清除(USART_SendData())。 // 返回值 无
-----------------------------------------------------------------------------------------------------*/
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT) {
uint16_t bitpos = 0x00, itmask = 0x00; /* 检查输入参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_CLEAR_IT(USART_IT)); /* CTS中断对UART4和UART5是无效的 */ if (USART_IT == USART_IT_CTS) {
assert_param(IS_USART_123_PERIPH(USARTx)); }
bitpos = USART_IT >> 0x08;
itmask = ((uint16_t)0x01 << (uint16_t)bitpos); USARTx->SR = (uint16_t)~itmask; }
[编辑] USART实例
实例USART_HyperTerminal_Interrupt
[编辑] main.c
[编辑] main函数
int main(void) {
/* NVIC 配置 */
NVIC_Configuration();
/* USARTx 配置
------------------------------------------------------*/ /* USARTx 配置如下: - 波特率9600 - 字长8位 - 停止位2位 - 奇校验
- 不使用硬件流控制 (RTS 和 CTS 信号) - 收发使能 */
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_2; USART_InitStructure.USART_Parity = USART_Parity_Odd; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
STM_EVAL_COMInit(COM1, &USART_InitStructure);
/* 使能 EVAL_COM1 发送中断:当EVAL_COM1 发送数据寄存器空,产生该中断 */
USART_ITConfig(EVAL_COM1, USART_IT_TXE, ENABLE);
/* 使能 EVAL_COM1 接收中断:当EVAL_COM1 接收数据寄存器非空,产生该中断 */
USART_ITConfig(EVAL_COM1, USART_IT_RXNE, ENABLE);
while (1) {
} }
[编辑] NVIC配置函数NVIC_Configuration
/*----------------------------------------------------------------------------------------------------- // 功能描述 配置NVIC // 输入参数 无 // 返回值 无
-----------------------------------------------------------------------------------------------------*/ void NVIC_Configuration(void) {
NVIC_InitTypeDef NVIC_InitStructure;
/* 使能 USARTx 中断 */
NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
[编辑] stm32100b_eval.h
#define COMn 2
// 描述 COM1口的定义,连接到 USART1
#define EVAL_COM1 USART1
#define EVAL_COM1_CLK RCC_APB2Periph_USART1 #define EVAL_COM1_TX_PIN GPIO_Pin_9 #define EVAL_COM1_TX_GPIO_PORT GPIOA
#define EVAL_COM1_TX_GPIO_CLK RCC_APB2Periph_GPIOA #define EVAL_COM1_RX_PIN GPIO_Pin_10 #define EVAL_COM1_RX_GPIO_PORT GPIOA
#define EVAL_COM1_RX_GPIO_CLK RCC_APB2Periph_GPIOA #define EVAL_COM1_IRQn USART1_IRQn
// 描述 COM2口的定义,连接到 USART2 (USART2 引脚被映射到 GPIOD) #define EVAL_COM2 USART2
#define EVAL_COM2_CLK RCC_APB1Periph_USART2 #define EVAL_COM2_TX_PIN GPIO_Pin_5 #define EVAL_COM2_TX_GPIO_PORT GPIOD
#define EVAL_COM2_TX_GPIO_CLK RCC_APB2Periph_GPIOD #define EVAL_COM2_RX_PIN GPIO_Pin_6 #define EVAL_COM2_RX_GPIO_PORT GPIOD
#define EVAL_COM2_RX_GPIO_CLK RCC_APB2Periph_GPIOD #define EVAL_COM2_IRQn USART2_IRQn
[编辑] stm32100b_eval.c
[编辑] 串口初始化函数STM_EVAL_COMInit
USART_TypeDef* COM_USART[COMn] = {EVAL_COM1, EVAL_COM2};
GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT, EVAL_COM2_TX_GPIO_PORT};
GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT, EVAL_COM2_RX_GPIO_PORT};
const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK, EVAL_COM2_CLK};
const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK, EVAL_COM2_TX_GPIO_CLK};
const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK, EVAL_COM2_RX_GPIO_CLK};
const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN, EVAL_COM2_TX_PIN};
const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN};
/*----------------------------------------------------------------------------------------------------- // 功能描述 配置COM口
// 输入参数 COM:指定待配置的COM口 // 该参数可以是下列参数之一: // COM1 // COM2
// 输入参数 USART_InitStruct:指向结构USART_InitTypeDef的指针,包含USART外设的配置信息 // 返回值 无
-----------------------------------------------------------------------------------------------------*/
void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)
共分享92篇相关文档