stm32的串口中断配置,也是很简单的.
首先是配置uart的gpio口
首先是配置uart的gpio口
/**********************************************
* name : uart1_gpio_configuration
* deion : 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 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);
}
然后是配置串口参数
/*******************************************************
* name : uart1_configuration
* deion : configures the uart1
* input : none
* output : none
* return : none
*********************************************/
void usart_configuration(void)
{
usart_inittypedef usart_initstructure;
usart_clockinittypedef usart_clockinitstructure;
uart1_gpio_configuration();
usart_clockinitstructure.usart_clock = usart_clock_disable;
usart_clockinitstructure.usart_cpol = usart_cpol_low;
usart_clockinitstructure.usart_cpha = usart_cpha_2edge;
usart_clockinitstructure.usart_lastbit = usart_lastbit_disable;
/* configure the usart1 synchronous paramters */
usart_clockinit(usart1, &usart_clockinitstructure);
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 usart1 basic and asynchronous paramters */
usart_init(usart1, &usart_initstructure);
/* enable usart1 receive interrupts */
usart_itconfig(usart1, usart_it_rxne, enable);
/* enable usart1 */
usart_cmd(usart1, enable);
}
然后是在中断设置,需要修改stm32f10x_it.c 中的串口中断函数 并且需要修改void nvic_configuration(void)函数
修改nvic_configuration函数
/***********************************************************
* name : nvic_configuration
* deion : configures nvic and vector table base location.
* input : none
* output : none
* return : none
***************************************************/
void nvic_configuration(void)
{
nvic_inittypedef nvic_initstructure;
#ifdef vect_tab_ram
/* set the vector table base location at 0x20000000 */
nvic_setvectortable(nvic_vecttab_ram, 0x0);
#else /* vect_tab_flash */
/* set the vector table base location at 0x08000000 */
nvic_setvectortable(nvic_vecttab_flash, 0x0);
#endif
/* configure the nvic preemption priority bits */
nvic_prioritygroupconfig(nvic_prioritygroup_0);
/* enable the usart1 interrupt */
nvic_initstructure.nvic_irqchannel = usart1_irqchannel;
nvic_initstructure.nvic_irqchannelsubpriority = 0;
nvic_initstructure.nvic_irqchannelcmd = enable;
nvic_init(&nvic_initstructure);
}
//串口中断
void usart1_irqhandler(void)
{
//处理接收到的数据
if(usart_getitstatus(usart1, usart_it_rxne) != reset)
{
/* clear the usart1 receive interrupt */
usart_clearitpendingbit(usart1, usart_it_rxne);
}
//发送中断
if (usart_getitstatus(usart1, usart_it_txe) != reset)
{
usart_senddata(usart1, send_data[send_length++]);
if (send_length==send_length)
{
//发送字节结束
usart_clearitpendingbit(usart1,usart_it_txe);
usart_itconfig(usart1, usart_it_txe, disable);
usart_itconfig(usart1, usart_it_tc, enable);
}
}
//发送完成
if (usart_getitstatus(usart1, usart_it_tc) != reset)
{
usart_clearitpendingbit(usart1,usart_it_tc);
usart_itconfig(usart1, usart_it_tc, disable);
}
}
在需要发送的程序里send_data[send_length]和发送长度设置好,
void send_to_pc(void)
{
//设置好send_data[send_length]数组
//打开发送中断
usart_itconfig(usart1, usart_it_txe, enable);
}
至此 串口就可以工作起来了!~
一加3T评测:旗舰手机不可否认!
解读个人人工智能/AI助手的发展
Alarm Sounds When RF Transmitter is Out of Range
电气设备的装配及安装固定牢
触屏手机从电阻屏演变到电磁屏
STM32的串口中断配置
三相电的功率计算方法介绍
荣耀V10怎么样 一台相当趋向完美的手机
峰会回顾第6期 | 毕昇编译器与OpenHarmony RISC-V生态的进展
PDH光端机的原理_PDH光端机的作用优点
你知道吗?台积电技术优势之一在于FoWLP封装
深度学习已至“瓶颈”?数据处理或许是一剂良药
水分对锂电池性能有何影响?水分对锂电池性能影响大吗?
低压低功耗CMOS电流反馈运算放大器设计
受市场需求趋缓影响 笔电双雄广达、仁宝较2015年营收同期减少
台积电用7纳米技术制造出了10亿颗功能完好的芯片
如何将MPO接口光模块与LC接口光模块进行连接?
韩国三星电子投资高达 170 亿美元在美国建立 3nm 晶圆厂 扩大在先进制程竞争
传感器在VR中有着什么样的作用
基于压力传感器的温度控制系统设计