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

关于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
strang 回答时间:2018-11-9 11:28:16
哎 我也遇到此问题了,配置的和楼主的一样,就是接收不到数据,不知道楼主咋解决的

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版