OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3810|回复: 4

求助:UCOSII,函数传递参数值变化

[复制链接]

3

主题

24

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-1-18
在线时间
10 小时
发表于 2017-3-4 08:30:13 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 tian213 于 2017-3-4 08:35 编辑

1 我在STM32F407板子上移植UCOSII,一直都没出什么问题,最近我想增加串口6打印功能,结果串口一直无数据输出,后来裸奔打印测试时正常的。
2 单步调试串口6,并监视寄存器值得变化,发现在初始化时,串口6所有寄存器的值都是0.
3 后来跟踪到USART_INIT内,才发现问题,函数入口的参数USART6的值是0x40011400,但是在USART_INIT内使用时,参数值USARTx变为0x40011000(串口1的地址,串口1的寄存器也确实被设置了),初始化不成功应该就是这里的原因了。
4 其它函数 USART_Cmd,UASRT_ClearFlag,USART_TTConfig都是这样的问题
5 我的另外一个串口3,能初始化成功,函数内部的值是正常。


哪位大神清楚该怎么解决啊??这段串口6初始化程序在裸奔时是正常的。

最佳答案

查看完整内容[请看2#楼]

现在问题解决了,我在这段代码敲了几行回车,然后在全部重新编译就正常了。 因为这次是用光盘上的ucosII例程1直接修改的,把usrt6的相关代码直接拷贝到usart文件内覆盖,不知道是不是这个原因?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

24

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-1-18
在线时间
10 小时
 楼主| 发表于 2017-3-4 08:30:14 | 显示全部楼层
正点原子 发表于 2017-3-4 11:58
uart_init,这个函数,你并没有入口参数啊

现在问题解决了,我在这段代码敲了几行回车,然后在全部重新编译就正常了。

因为这次是用光盘上的ucosII例程1直接修改的,把usrt6的相关代码直接拷贝到usart文件内覆盖,不知道是不是这个原因?
回复

使用道具 举报

3

主题

24

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-1-18
在线时间
10 小时
 楼主| 发表于 2017-3-4 08:34:38 | 显示全部楼层
我的初始化代码如下:
void uart_init(u32 bound){
   //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE); //使能GPIOA时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6,ENABLE);//使能USART1时钟

        //串口1对应引脚复用映射
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_USART6); //GPIOA9复用为USART1
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_USART6); //GPIOA10复用为USART1
        
        //USART1端口配置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //GPIOA9与GPIOA10
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //速度50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
        GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化PA9,PA10

   //USART1 初始化设置
        USART_InitStructure.USART_BaudRate = bound;//波特率设置
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
        USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式
  USART_Init(USART6, &USART_InitStructure); //初始化串口1
        
  USART_Cmd(USART6, ENABLE);  //使能串口1
        
        USART_ClearFlag(USART6, USART_FLAG_TC);
        
#if EN_USART1_RX        
        USART_ITConfig(USART6, USART_IT_RXNE, ENABLE);//开启相关中断

        //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn;//串口1中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、

#endif
        
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-4 11:58:28 | 显示全部楼层
uart_init,这个函数,你并没有入口参数啊
回复

使用道具 举报

3

主题

24

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-1-18
在线时间
10 小时
 楼主| 发表于 2017-3-6 15:52:45 | 显示全部楼层
正点原子 发表于 2017-3-4 11:58
uart_init,这个函数,你并没有入口参数啊

USART_Init(USART6, &USART_InitStructure); //初始化串口1
是这个参数,执行这一步时监视USART6值与程序内部的参数值不一致。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 12:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表