本帖最后由 zhg195X 于 2015-1-8 18:09 编辑
这个UART 为何这般坑我。。。之前一直用USART1,2,3 从来没有用过 4和5 ,今天一用,果然和网上大家说的那样很坑。。。特来向大家讨教下。
这是我的程序
- #include "stm32f10x.h"
- /* 声明GPIO设置函数 */
- void GPIO_Config(void);
- /* 设置串口 */
- void COM_Config(void);
- /* 设置中断 */
- void NVIC_Config(void);
- int main(void)
- {
- /* 设置GPIO */
- GPIO_Config();
- /* 设置串口 */
- COM_Config();
- /* 设置中断 */
- NVIC_Config();
- while(1)
- { }
-
- }
- void GPIO_Config(void)
- {
- /* 声明GPIO初始化结构体 */
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* 使能 GPIO 时钟 */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_AFIO , ENABLE);
-
- /* 使能 USART4 时钟 */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
- /*USART4输出TX管脚PC10为复用推挽 */
- GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-
- /*USART4输入Rx管脚PC11为浮空输入 */
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- }
- void COM_Config(void)
- {
- /* 声明USART初始化结构体 */
- USART_InitTypeDef USART_InitStructure;
- /* 设置波特率115200 */
- USART_InitStructure.USART_BaudRate = 115200;
- /* 设置8位数据位 */
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- /* 设置1位停止位 */
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- /* 设置无校验 */
- USART_InitStructure.USART_Parity = USART_Parity_No;
- /* 设置不开启硬件流控制 */
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- /* 设置USART模式为收发 */
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- /* 按照初始化结构体进行USART2的初始化 */
- USART_Init(UART4, &USART_InitStructure);
- /* 使能UART4 */
- USART_Cmd(UART4, ENABLE);
- }
- void NVIC_Config(void)
- {
- /* 定义中断向量初始化结构体 */
- NVIC_InitTypeDef NVIC_InitStructure;
- /* 使能串口4的输入中断 */
- USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);
- /* 使能串口4的中断向量 */
- NVIC_InitStructure.NVIC_IRQChannel=UART4_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
-
- NVIC_Init(&NVIC_InitStructure);
- }
复制代码 下面是终端服务程序
- void UART4_IRQHandler(void)
- {
- char ch;
- /* 判断是否接收中断 */
- if(USART_GetFlagStatus(UART4,USART_FLAG_RXNE)!=RESET)
- {
- /* 接受字符放入ch缓存 */
- ch=USART_ReceiveData(UART4);
- /* 通过USART4发送ch的内容 */
- USART_SendData(UART4,ch);
- }
- /* 清除中断标志 */
- USART_ClearFlag(UART4,USART_FLAG_RXNE);
- }
- /*
复制代码 实在是看不到那块错了。。。。
|
stm32f107,是我程序出问题了吗
什么现象也没有,一直发送给stm32 字节,它不回发。。不知道是那块的问题,他这是进不了中断啊。。。你怎么看