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

豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

[复制链接]
北京小王儿 发布时间:2009-3-20 14:39

            一步一步的走 GPIO    按键    LED    定时器都说了 下面开始串口UART咯
            
            本教程的主角是:串口 UART  

            
            通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。
            它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的DMA方式,可以实现高速数据通信。
            
            主要特性:
            全双工的,异步通信
            NR 标准格式
            分数波特率发生器系统
                     -发送和接收共用的可编程波特率,最高到4.5Mbits/s
            可编程数据字长度(8位或9位)
            可配置的停止位          -支持1或2个停止位
            LIN主发送同步断开符的能力以及LIN从检测断开符的能力
                     -    当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符
            发送方为同步传输提供时钟
            IRDA SIR 编码器解码器
                     -    在正常模式下支持3/16位的持续时间
            智能卡模拟功能
                     -    智能卡接口支持ISO7816          -3标准里定义的异步协议智能卡
                     -    智能卡用到的0.5和1.5个停止位
            单线半双工通信
            使用DMA的可配置的多缓冲器通信
                     -    在保留的SRAM里利用集中式DMA缓冲接收/发送字节
            单独的发送器和接收器使能位
            检测标志
                     -    接收缓冲器满
                     -    发送缓冲器空
                     -    传输结束标志
            校验控制
                     -    发送校验位
                     -    对接收数据进行校验
            四个错误检测标志
                     -    溢出错误
                     -    噪音错误
                     -    帧错误
                     -    校验错误
                10个带标志的中断源
                     -    CTS改变
                     -    LIN断开符检测
                     -    发送数据寄存器
                     -    发送完成
                     -    接收数据寄存器
                     -    检测到总线为空
                     -    溢出错误
                     -    帧错误
                     -    噪音错误
                     -    校验错误
            多处理器通信         -          - 如果地址不匹配,则进入静默模式
            从静默模式中唤醒(通过空闲总线检测或地址标志检测)
            两种唤醒接收器的方式
                     -    地址位(MSB)
                     -    空闲总线
            
            
            
            
[/td]        [/tr]        [tr]            [td]
            
            STM32的串口配置 也挺方便的
            
            首先是配置UART的GPIO口
            /*******************************************************************************
            * Function Name    : UART1_GPIO_Configuration
            * Description          : Configures the uart1 GPIO ports.
            * Input                          : None
            * Output                      : None
            * Return                      : None
            *******************************************************************************/
            void UART1_GPIO_Configuration(void)
            {
            GPIO_InitTypeDef GPIO_InitStructure;
            // Configure USART1_Tx as alternate function push-pull
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
            GPIO_Init(GPIOA, &GPIO_InitStructure);
            
            // Configure USART1_Rx as input floating
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
            GPIO_Init(GPIOA, &GPIO_InitStructure);  
            }
            
            然后是配置串口参数
            
            
            /* 如果使用查询的方式发送和接收数据 则不需要使用串口的中断  
                如果需要使用中断的方式发送和接收数据 则需要使能串口中断
                 函数原形 void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState)
                 功能描述 使能或者失能指定的 USART 中断
               
                     USART_IT                         描述
                     USART_IT_PE         奇偶错误中断
                     USART_IT_TXE     发送中断
                     USART_IT_TC         传输完成中断
                     USART_IT_RXNE 接收中断
                     USART_IT_IDLE     空闲总线中断
                     USART_IT_LBD     LIN中断检测中断
                     USART_IT_CTS     CTS中断
                     USART_IT_ERR     错误中断
            
            */
            
            
            /*******************************************************************************
            * Function Name    : UART1_Configuration
            * Description          : Configures the uart1
            * Input                          : None
            * Output                      : None
            * Return                      : None
            *******************************************************************************/
            void UART1_Configuration(void)
            {
            
                USART_InitTypeDef USART_InitStructure;
                /* USART1 configured as follow:
                     - BaudRate = 9600 baud  
                     - Word Length = 8 Bits
                     - One Stop Bit
                     - No parity
                     - Hardware flow control disabled (RTS and CTS signals)
                     - Receive and transmit enabled
                */
                USART_InitStructure.USART_BaudRate = 9600;
                USART_InitStructure.USART_WordLength = USART_WordLength_8b;
                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;
              
                /* Configure the USART1*/
                USART_Init(USART1, &USART_InitStructure);
            
                /* Enable USART1 Receive and Transmit interrupts */
                USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
            
            
                /* Enable the USART1 */
                USART_Cmd(USART1, ENABLE);  
            }
            
            
[/td]        [/tr]        [tr]            [td]
            发送一个字符
            /*******************************************************************************
            * Function Name    : Uart1_PutChar
            * Description          : printf a char to the uart.
            * Input                          : None
            * Output                      : None
            * Return                      : None
            *******************************************************************************/
            u8 Uart1_PutChar(u8 ch)
            {
            /* Write a character to the USART */
            USART_SendData(USART1, (u8) ch);
            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
            {
            }
            return ch;
            }
            
[/td]        [/tr]        [tr]            [td]
            
            <font size="3">发送一个字符串
            /*******************************************************************************
            * Function Name    : Uart1_PutString
            * Description          : print a string to the uart1
            * Input                          : buf为发送数据的地址 , len为发送字符的个数
            * Output                      : None
            * Return                      : None
            *******************************************************************************/
            void Uart1_PutString(u8* buf , u8 len)
            {
            for(u8 i=0;i
收藏 评论7 发布时间:2009-3-20 14:39

举报

7个回答
北京小王儿 回答时间:2009-3-20 14:41:36

豆皮 - STM32开发板入门教程(五) - 我的豆皮会唱歌 (原...

      
            呵呵 不是播放MP3啦(顺便说一下 豆皮播放MP3 bozai已经做出来了哦 呵呵 )
            是利用豆皮STM32开发板上的蜂鸣器播放不同音符 不同的pwm频率加到蜂鸣器上能产生不一样的音符
            呵呵 原理到是简单 但是 蜂鸣器真的不好调 音符也不好确定 我花了好长的时间 才确定的频率 把实验室的人都吵疯了 一个个都对我有意见啊 因为我在不停的用蜂鸣器发出“鬼叫的声音”    娃哈哈哈 基本上可以用了
            还将就听着    呵呵 附上一个音符表 大家也可以自己去尝试别的频率 呵呵
            
            本教程的主角是:STM32 PWM 蜂鸣器  
            
         
  
            
            各音的频率    大家可以参考着修改频率 这样就可以发出悦耳的声音了 呵呵
            初始化pwm输出 豆皮借的是TIM4的channnel4    呵呵
                        /*******************************************************************************
                        * Function Name    : Change_for_Note
                        * Description : 修改pwm频率
                        * Input         : u16类型的频率值
                        * Output         : None
                        * Return         : None
                        *******************************************************************************/
                        void Change_for_Note(u16 NoteSet)
                        {
                          
                            TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
                            TIM_OCInitTypeDef    TIM_OCInitStructure;
                          
                            /* Time base configuration */
                            TIM_TimeBaseStructure.TIM_Period = NoteSet;
                            TIM_TimeBaseStructure.TIM_Prescaler = 0;
                            TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;
                            TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
                            TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
                          
                            /* PWM1 Mode configuration: Channel4 */
                            TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
                            TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
                            TIM_OCInitStructure.TIM_Pulse = NoteSet/2;
                            TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High ;
                            TIM_OC4Init(TIM4, &TIM_OCInitStructure);
                        }  
                        
                        
                        
                        
[/td]                    [/tr]                    [tr]                        [td]
                        
                        <font size="3">/* 取得音高和节拍 奏一个音符 */
                        void Sing_A_Note(int music,int mytime)
                        {
                        
                        int i;
                        Change_for_Note(music);
                        for(i=0;i
chsking 回答时间:2009-4-10 10:13:43

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

怎么没有附件啊 我想下载
sxz163 回答时间:2009-5-9 19:55:20

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART
附件在哪里?
dontium 回答时间:2010-1-29 14:17:56

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

哈哈,豆皮肯定不是个音乐爱好者了,要不,怎么不知道十二平均率?
C调1= 440 Hz
然后按12平均率,算出每个音符的频率,
wanglujiao-2794 回答时间:2010-4-20 20:53:53

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

附件呢
yeye107 回答时间:2010-8-30 22:19:24

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

学习了。。。。
yeye107 回答时间:2010-8-30 22:19:35

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

学习了。。。。

所属标签

相似技术帖

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