基于STM32F103ZE的USART2 端口时钟

usart1程序很多,看看usart2程序。注意红色部分,首先要使能相关端口的时钟。
因为usart2可以映射成不同的端口,所以要端口映射。
结合你自己的开发板,设置正确的映射口.(正点原子的是pa03pa02.)
stm32f103ze默认的usart2就是pa03pa02,如果配置映射,usart2端口是pd05pd06了。
程序在正点原子开发板sram中调试通过,开发环境iar5.30.
void usart2_initialise( u32 bound )
{
gpio_inittypedef gpio_initstructure;//i/o¿ú3õê¼»ˉ½á11ìå
nvic_inittypedef nvic_initstructure;//öd¶ï3õê¼»ˉ½á11ìå
usart_inittypedef usart_initstructure;//′®¿ú3õê¼»ˉ½á11ìå
/* enable the usart2 pins software remapping */
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa ,enable);
rcc_apb1periphclockcmd(rcc_apb1periph_usart2, enable);
/* configure usart2 rx (pa.03) as input floating */
gpio_initstructure.gpio_pin = gpio_pin_3;
gpio_initstructure.gpio_mode = gpio_mode_in_floating;
gpio_init(gpioa, &gpio_initstructure);
/* configure usart2 tx (pa.02) as alternate function push-pull */
gpio_initstructure.gpio_pin = gpio_pin_2;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_af_pp;
gpio_init(gpioa, &gpio_initstructure);
/* enable the usart2 interrupt */
nvic_initstructure.nvic_irqchannel = usart2_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority = 3;
nvic_initstructure.nvic_irqchannelsubpriority = 2;
nvic_initstructure.nvic_irqchannelcmd = enable;
nvic_init(&nvic_initstructure);
usart_initstructure.usart_baudrate = bound; //ò»°ãéèöãîa9600;
usart_initstructure.usart_wordlength = usart_wordlength_8b;//×ö3¤îa8î»êy¾y¸ñê½
usart_initstructure.usart_stopbits = usart_stopbits_1; //ò»¸öí£ö1î»
usart_initstructure.usart_parity = usart_parity_no; //îtææå¼d£ñéî»
usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none;//yá÷¿øöæ
usart_initstructure.usart_mode = usart_mode_rx usart_mode_tx;//êõ·¢ä£ê½
usart_init(usart2, &usart_initstructure);
usart_itconfig(usart2, usart_it_rxne, enable);
//usart_itconfig(usart2, usart_it_txe, enable);
/* enable usart2 */
usart_cmd(usart2, enable);
}
void usart2_irqhandler(void)
{
if(usart_getflagstatus(usart2, usart_flag_rxne) == set)
{
usart_senddata(usart2, usart_receivedata(usart2));
}
}
该程序功能是返回你发送到串口的数据。
如果你的usart2接到pd端口上面了,要修改程序如下,这里就需要端口映射了,映射寄存器是afio控制的,它接在apb2时钟区域,所以下面的红色代码必须要有,蓝色代码对端口进行初始化。
void usart2_initialise( u32 bound )
{
gpio_inittypedef gpio_initstructure;//i/o¿ú3õê¼»ˉ½á11ìå
nvic_inittypedef nvic_initstructure;//öd¶ï3õê¼»ˉ½á11ìå
usart_inittypedef usart_initstructure;//′®¿ú3õê¼»ˉ½á11ìå
/* enable the usart2 pins software remapping */
rcc_apb2periphclockcmd(rcc_apb2periph_gpiod ,enable);
rcc_apb1periphclockcmd(rcc_apb1periph_usart2,enable);
rcc_apb2periphclockcmd(rcc_apb2periph_afio,enable);
gpio_pinremapconfig(gpio_remap_usart2, enable);
/* configure usart2 rx (pd.06) as input floating */
gpio_initstructure.gpio_pin = gpio_pin_6;
gpio_initstructure.gpio_mode = gpio_mode_in_floating;
gpio_init(gpiod, &gpio_initstructure);
/* configure usart2 tx (pd.05) as alternate function push-pull */
gpio_initstructure.gpio_pin = gpio_pin_5;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_af_pp;
gpio_init(gpiod, &gpio_initstructure);
/* enable the usart2 interrupt */
nvic_initstructure.nvic_irqchannel = usart2_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority = 3;
nvic_initstructure.nvic_irqchannelsubpriority = 2;
nvic_initstructure.nvic_irqchannelcmd = enable;
nvic_init(&nvic_initstructure);
usart_initstructure.usart_baudrate = bound;//ò»°ãéèöãîa9600;
usart_initstructure.usart_wordlength = usart_wordlength_8b;//×ö3¤îa8î»êy¾y¸ñê½
usart_initstructure.usart_stopbits = usart_stopbits_1;//ò»¸öí£ö1î»
usart_initstructure.usart_parity = usart_parity_no;//îtææå¼d£ñéî»
usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none;//¾yá÷¿øöæ
usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx;//êõ·¢ä£ê½
usart_init(usart2, &usart_initstructure);
usart_itconfig(usart2, usart_it_rxne, enable);
//usart_itconfig(usart2, usart_it_txe, enable);
/* enable usart2 */
usart_cmd(usart2, enable);
}
void usart2_irqhandler(void)
{
if(usart_getflagstatus(usart2, usart_flag_rxne) == set)
{
usart_senddata(usart2, usart_receivedata(usart2));
}
}
该程序功能是返回你发送到串口的数据。
如果你的usart2接到pd端口上面了,要修改程序如下,这里就需要端口映射了,映射寄存器是afio控制的,它接在apb2时钟区域,所以下面的红色代码必须要有,蓝色代码对端口进行初始化。
void usart2_initialise( u32 bound )
{
gpio_inittypedef gpio_initstructure;//i/o¿ú3õê¼»ˉ½á11ìå
nvic_inittypedef nvic_initstructure;//öd¶ï3õê¼»ˉ½á11ìå
usart_inittypedef usart_initstructure;//′®¿ú3õê¼»ˉ½á11ìå
/* enable the usart2 pins software remapping */
rcc_apb2periphclockcmd(rcc_apb2periph_gpiod ,enable);
rcc_apb1periphclockcmd(rcc_apb1periph_usart2,enable);
rcc_apb2periphclockcmd(rcc_apb2periph_afio,enable);
gpio_pinremapconfig(gpio_remap_usart2, enable);
/* configure usart2 rx (pd.06) as input floating */
gpio_initstructure.gpio_pin = gpio_pin_6;
gpio_initstructure.gpio_mode = gpio_mode_in_floating;
gpio_init(gpiod, &gpio_initstructure);
/* configure usart2 tx (pd.05) as alternate function push-pull */
gpio_initstructure.gpio_pin = gpio_pin_5;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_af_pp;
gpio_init(gpiod, &gpio_initstructure);
/* enable the usart2 interrupt */
nvic_initstructure.nvic_irqchannel = usart2_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority = 3;
nvic_initstructure.nvic_irqchannelsubpriority = 2;
nvic_initstructure.nvic_irqchannelcmd = enable;
nvic_init(&nvic_initstructure);
usart_initstructure.usart_baudrate = bound;//ò»°ãéèöãîa9600;
usart_initstructure.usart_wordlength = usart_wordlength_8b;//×ö3¤îa8î»êy¾y¸ñê½
usart_initstructure.usart_stopbits = usart_stopbits_1;//ò»¸öí£ö1î»
usart_initstructure.usart_parity = usart_parity_no;//îtææå¼d£ñéî»
usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none;//¾yá÷¿øöæ
usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx; //êõ·¢ä£ê½
usart_init(usart2, &usart_initstructure);
usart_itconfig(usart2, usart_it_rxne, enable);
//usart_itconfig(usart2, usart_it_txe, enable);
/* enable usart2 */
usart_cmd(usart2, enable);
}
void usart2_irqhandler(void)
{
if(usart_getflagstatus(usart2, usart_flag_rxne) == set)
{
usart_senddata(usart2, usart_receivedata(usart2));
}
}

如何通过所投画面来鉴别投影机技术指标
抑制瞬时干扰的脉冲星观测测试验证
小米6宝石蓝版开箱,就是那么难抢到手!
浅析SAN与NAS存储系统架构的区别
苹果蒂姆·库克赢得最佳CEO声誉的10个理由
基于STM32F103ZE的USART2 端口时钟
骁龙835规格参数具体是哪些_骁龙835真能秒天秒地
小米MIX2什么时候上市?最新消息:小米MIX2渲染图曝光马上就来,小米MIX还是供不应求!
红米Note4X高配版终于来了!但米粉怪不给力?
EWB基础教程
电子芯闻早报:高通急了!直面“骁龙810高烧”
SOLIDWORKS技巧大全培训教程
“四重保障”助推汽车产业智能化升级!RoboSense打造高标准激光雷达安全技术体系
李开复:人工智能会给我们带来怎样的变化?我们又该如何对待?
什么是配电变压器
Go语言凭借什么成为云原生第一语言的?
Oculus Rift和Windows混合现实耳机市场份额将持续增长
如何提升运算放大器的相关知识和技能?
磐石测控:PS-9405S系列笔记本键盘弹力测试机的参数情况?
ThingsKit物联网平台优势