你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于stm32 的UART4

[复制链接]
zhg195X 提问时间:2015-1-8 18:08 /
本帖最后由 zhg195X 于 2015-1-8 18:09 编辑

这个UART 为何这般坑我。。。之前一直用USART1,2,3 从来没有用过 4和5 ,今天一用,果然和网上大家说的那样很坑。。。特来向大家讨教下。

这是我的程序
  1. #include        "stm32f10x.h"

  2. /* 声明GPIO设置函数 */
  3. void GPIO_Config(void);
  4. /* 设置串口 */
  5. void COM_Config(void);
  6. /* 设置中断 */
  7. void NVIC_Config(void);

  8. int main(void)
  9. {

  10.         /* 设置GPIO */
  11.         GPIO_Config();
  12.         /* 设置串口 */
  13.         COM_Config();        
  14.         /* 设置中断 */
  15.         NVIC_Config();               
  16.         while(1)
  17.         {        }
  18.         
  19. }

  20. void GPIO_Config(void)
  21. {
  22.         /* 声明GPIO初始化结构体 */        
  23.         GPIO_InitTypeDef GPIO_InitStructure;
  24.         
  25.         /* 使能 GPIO 时钟 */
  26.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_AFIO , ENABLE);            
  27.         

  28.         /* 使能 USART4 时钟 */
  29.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);

  30.         /*USART4输出TX管脚PC10为复用推挽 */        
  31.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  33.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  34.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  35.         
  36.         /*USART4输入Rx管脚PC11为浮空输入 */
  37.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  38.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  39.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  40. }

  41. void COM_Config(void)
  42. {
  43.         /* 声明USART初始化结构体 */
  44.         USART_InitTypeDef USART_InitStructure;

  45.         /* 设置波特率115200 */
  46.         USART_InitStructure.USART_BaudRate = 115200;
  47.         /* 设置8位数据位 */
  48.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  49.         /* 设置1位停止位 */
  50.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  51.         /* 设置无校验 */
  52.         USART_InitStructure.USART_Parity = USART_Parity_No;
  53.         /* 设置不开启硬件流控制 */
  54.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  55.         /* 设置USART模式为收发 */
  56.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        
  57.         /* 按照初始化结构体进行USART2的初始化 */                                          
  58.         USART_Init(UART4, &USART_InitStructure);
  59.         /* 使能UART4 */        
  60.         USART_Cmd(UART4, ENABLE);
  61. }

  62. void NVIC_Config(void)
  63. {
  64.         /* 定义中断向量初始化结构体 */
  65.         NVIC_InitTypeDef NVIC_InitStructure;
  66.         /* 使能串口4的输入中断 */
  67.         USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);
  68.         /* 使能串口4的中断向量 */
  69.         NVIC_InitStructure.NVIC_IRQChannel=UART4_IRQn;
  70.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  71.           NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
  72.           NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

  73.         NVIC_Init(&NVIC_InitStructure);        
  74. }
复制代码
下面是终端服务程序
  1. void UART4_IRQHandler(void)
  2. {
  3.         char ch;
  4.         /* 判断是否接收中断 */
  5.         if(USART_GetFlagStatus(UART4,USART_FLAG_RXNE)!=RESET)
  6.         {
  7.                 /* 接受字符放入ch缓存 */
  8.                 ch=USART_ReceiveData(UART4);
  9.                 /* 通过USART4发送ch的内容 */
  10.                 USART_SendData(UART4,ch);
  11.         }
  12.         /* 清除中断标志 */
  13.         USART_ClearFlag(UART4,USART_FLAG_RXNE);
  14. }
  15. /*
复制代码
实在是看不到那块错了。。。。


收藏 评论7 发布时间:2015-1-8 18:08

举报

7个回答
qianfan 回答时间:2015-1-9 12:22:05
你用的是那个芯片呢?我之前使用的时候一直好好地 啊
狂奔的企鹅 回答时间:2015-1-10 17:22:43
QianFan 发表于 2015-1-9 12:22
你用的是那个芯片呢?我之前使用的时候一直好好地 啊

stm32f107,是我程序出问题了吗
木易-357428 回答时间:2015-1-10 21:30:14
什么现象啊?我觉得USART_ClearFlag(UART4,USART_FLAG_RXNE);好像不是清除中断标志吧?
狂奔的企鹅 回答时间:2015-1-10 22:31:18
木易-357428 发表于 2015-1-10 21:30
什么现象啊?我觉得USART_ClearFlag(UART4,USART_FLAG_RXNE);好像不是清除中断标志吧? ...

什么现象也没有,一直发送给stm32 字节,它不回发。。不知道是那块的问题,他这是进不了中断啊。。。你怎么看
木易-357428 回答时间:2015-1-11 17:18:22
看不出来问题,不知道你硬件连接有没有问题。要不你就做一下实验,把USART4的参数都改成USART1看看能不能工作。
abend 回答时间:2015-1-11 18:04:20
标题应该写stm32f107的uart4
Bowen 回答时间:2018-11-9 11:28:16
哎 我也遇到此问题了,配置的和楼主的一样,就是接收不到数据,不知道楼主咋解决的

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版